最多删除一行

Deleting upto a line

我有一行看起来像:

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

我只想要最后一组数字:

-60.34277635

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

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

如果可能的话,Perl 方面的帮助,或者 Bash/Shell 最好。

试试这个:

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

awk '{print $NF}' file

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

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

使用 awk 并指定字段 8(假设格式不变),这是我得到的结果:

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

BASH 内置方式:

#!/bin/bash

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

输出:

-60.34277635

awk -F 'delimiter' '{print $NF}' - 如果你需要最后一列

awk -F 'delimiter' '{print $index}' - 如果您需要特定列的索引。请不要在这里索引以 1

开头