最多删除一行
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
开头
我有一行看起来像:
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
开头