4

使用awk,我想打印文件的最后一个匹配行。我只想要匹配的线本身,而不是任何范围的线。我可以使用这样的命令

awk '/foo/' bar.txt

但是,这将打印所有匹配的行,而不仅仅是最后一个。

4

5 回答 5

29

您可以将值保存在变量中,然后在处理整个文件后打印它:

awk '/foo/ {a=$0} END{print a}' file

测试

$ cat file
foo1
foo2
foo3
4
5
$ awk '/foo/ {a=$0} END{print a}' file
foo3
于 2013-06-25T13:07:49.240 回答
6

sed解决方案:

sed -n '/foo/h;$!b;g;p' bar.txt

将匹配regex放在保持缓冲区中并分支。继续这样做直到文件结束。到达文件末尾时,从保持空间中抓取行并将其放在模式空间中。打印图案空间。

于 2013-06-25T14:05:40.463 回答
5

反转文件并找到第一个匹配项。

tac file | awk '/foo/ {print; exit}'
于 2013-06-25T13:09:28.063 回答
5

该命令tail允许您检索n输入流的最后几行。您可以通过管道将awk输出输入tail以修剪除最后一行之外的所有内容:

awk '/foo/' bar.txt | tail -1
于 2013-06-25T13:04:59.210 回答
1

您可以为变量赋值并在处理行及其编号结束时打印它们。

文件:

$ cat file
foo1
foo2
foo3
4
5

命令:

$ awk '/foo/ {a=$0;n=NR} END{print n, a}' file
3 foo3
于 2021-01-13T22:37:59.003 回答