如何用awk打印特定的NR

时间:2012-05-23 19:13:30

标签: awk

我需要打印出特定记录,即尾部的3d,即NR ==总NR-2。我一直试图这样做差不多一个小时但仍然无法让它工作,所以这就是我所拥有的:

cat myfile | grep mystring | awk 'END {NR == $(NR-2); print $0}'

这给了我最后的NR,为​​什么?

2 个答案:

答案 0 :(得分:2)

awk处理每一行并在完成后抛出它,你必须手动保存它[N.B.您的NR == $(NR-2)检查行数是否等于最后一行中的(行数 - 2)字段]。最简单的方法是将它们全部存储起来,但这并不是非常有效,所以我们只能存储我们见过的最后三个。实际上最简单的方法是使用headtail

grep mystring myfile | tail -n3 | head -n1

awk

awk '/mystring/{three = two; two = one; one = $0} END{print three}' myfile

答案 1 :(得分:0)

有两种可能性。

您可以使用命令tac(而不是cat)来反转文件(从尾到头)并打印第3个

或使用缓冲区将最后x个结果放入内存