我有一行看起来像:
foo cat dog = -48.34277635 foo(horse->0) = -60.34277635
我只想要最后一组数字:
-60.34277635
使用该精确间距格式化该行。我到处寻找一个更简单的解决方案,但是我找不到任何东西而不会一块一块地砍掉文件,直到我把它归结为我想要的东西。我必须做的唯一方法是非常低效,并且想知道是否有其他方法可以做到这一点。通常,我会使用sed来获取特定的字符/单词,然后从那里删除。在我的字符串中重复单词的次数,我不能轻易做到这一点。
数字的长度也可以改变,但只能改变尾随小数。
如果可能的话,在Perl或Bash / Shell中提供帮助是最好的。
答案 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
开头