0

我需要打印出一条特定的记录,即尾部的 3d,即 NR == total NR-2。我一直在尝试这样做将近一个小时,但仍然无法正常工作,所以这就是我所拥有的:

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

这给了我最后一个 NR,为什么?

4

2 回答 2

2

awk处理每一行并在完成后将其丢弃,您必须手动保存它[注意您NR == $(NR-2)检查行数是否等于最后一行中的(行数 - 2)th 字段]。最简单的方法是将它们全部存储起来,但这不是非常有效的内存,所以我们可以只存储我们看到的最后三个。实际上最简单的方法是使用headand tail

grep mystring myfile | tail -n3 | head -n1

或与awk

awk '/mystring/{three = two; two = one; one = $0} END{print three}' myfile
于 2012-05-23T19:24:24.220 回答
0

有2种可能性。

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

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

于 2012-05-23T19:23:08.140 回答