打印最后一个匹配行?

时间:2013-06-25 13:03:39

标签: bash awk

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

awk '/foo/' bar.txt

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

5 个答案:

答案 0 :(得分:18)

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

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

测试

$ cat file
foo1
foo2
foo3
4
5
$ awk '/foo/ {a=$0} END{print a}' file
foo3

答案 1 :(得分:5)

命令tail允许您检索输入流的最后n行。您可以将awk输出传输到tail,以便删除除最后一行之外的所有内容:

awk '/foo/' bar.txt | tail -1

答案 2 :(得分:4)

sed解决方案:

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

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

答案 3 :(得分:3)

撤消该文件并找到第一个匹配。

tac file | awk '/foo/ {print; exit}'

答案 4 :(得分:0)

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

文件:

$ cat file
foo1
foo2
foo3
4
5

命令:

$ awk '/foo/ {a=$0;n=NR} END{print n, a}' file
3 foo3