如何使用awk打印特定NR

如何使用awk打印特定NR,awk,Awk,我需要打印出一个特定的记录,它是从尾部开始的3d,即NR==总NR-2。我已经尝试了将近一个小时,但仍然无法让它工作,所以我有: cat myfile | grep mystring | awk 'END {NR == $(NR-2); print $0}' 这给了我最后一个NR,为什么?有两种可能性 您可以使用命令(而不是cat)反转文件(从尾部到头部)并打印第三个 或者使用缓冲区将最后的x结果放入内存awk处理每一行并在完成后将其抛出,您必须手动保存它[N.B.您的NR==$(NR-2)检

我需要打印出一个特定的记录,它是从尾部开始的3d,即NR==总NR-2。我已经尝试了将近一个小时,但仍然无法让它工作,所以我有:

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

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

有两种可能性

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


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

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

grep mystring myfile | tail -n3 | head -n1
或使用
awk

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

rev
反转一行中的字符,您正在查找
tac
。谢谢,这怎么可能?我的意思是,三个|两个|一个变量吗?@user1413424是的,
三个
两个
,和
一个
都是变量。在awk中,任何裸字都是一个变量。(
$x
表示一个位置变量,即
x
th字段,
x
甚至可以是一个变量!)是的,我理解,我只是不知道这三个“两个”一个是实际指NR的保留变量。对吗?不,它们不是保留的,它们只是我选择的变量,以便于记住我们想要哪一行。