删除最多一行

时间:2015-06-17 19:25:09

标签: bash perl shell sed scripting

我有一行看起来像:

  foo cat dog =      -48.34277635  foo(horse->0) =      -60.34277635  

我只想要最后一组数字:

-60.34277635

使用该精确间距格式化该行。我到处寻找一个更简单的解决方案,但是我找不到任何东西而不会一块一块地砍掉文件,直到我把它归结为我想要的东西。我必须做的唯一方法是非常低效,并且想知道是否有其他方法可以做到这一点。通常,我会使用sed来获取特定的字符/单词,然后从那里删除。在我的字符串中重复单词的次数,我不能轻易做到这一点。

数字的长度也可以改变,但只能改变尾随小数。

如果可能的话,在Perl或Bash / Shell中提供帮助是最好的。

5 个答案:

答案 0 :(得分:2)

如果你的意思是你只需要每行的最后一个字段,那么你可以用Perl

来写
open my $fh, '<', 'myfile' or die $!;
my @data;
push @data, (split)[-1] while <$fh>;

答案 1 :(得分:1)

试试这个:

grep -oE '[0-9.-]+$' file

awk '{print $NF}' file

答案 2 :(得分:0)

使用awk并指定字段8(假设格式没有改变),这就是我得到的:

$ cat testfile 
foo cat dog =      -48.34277635  foo(horse->0) =      -60.34277635
$ awk '{print $8}' < testfile
-60.34277635

答案 3 :(得分:0)

BASH内置方式:

#!/bin/bash

line='foo cat dog =      -48.34277635  foo(horse->0) =      -60.34277635'
echo "${line##* }"

输出:

-60.34277635

答案 4 :(得分:0)

awk -F&#39;分隔符&#39; &#39; {print $ NF}&#39; - 如果你需要最后一栏

awk -F&#39;分隔符&#39; &#39; {print $ index}&#39; - 如果您需要具有特定列的索引。请不要在这里索引以1

开头