我需要打印出一条特定的记录,即尾部的 3d,即 NR == total NR-2。我一直在尝试这样做将近一个小时,但仍然无法正常工作,所以这就是我所拥有的:
cat myfile | grep mystring | awk 'END {NR == $(NR-2); print $0}'
这给了我最后一个 NR,为什么?
我需要打印出一条特定的记录,即尾部的 3d,即 NR == total NR-2。我一直在尝试这样做将近一个小时,但仍然无法正常工作,所以这就是我所拥有的:
cat myfile | grep mystring | awk 'END {NR == $(NR-2); print $0}'
这给了我最后一个 NR,为什么?
awk
处理每一行并在完成后将其丢弃,您必须手动保存它[注意您NR == $(NR-2)
检查行数是否等于最后一行中的(行数 - 2)th 字段]。最简单的方法是将它们全部存储起来,但这不是非常有效的内存,所以我们可以只存储我们看到的最后三个。实际上最简单的方法是使用head
and tail
:
grep mystring myfile | tail -n3 | head -n1
或与awk
:
awk '/mystring/{three = two; two = one; one = $0} END{print three}' myfile