linux 使用awk打印按行过滤的文件的最后N行

b1zrtrql  于 2023-06-29  发布在  Linux
关注(0)|答案(1)|浏览(116)

我一直在用

awk '/KEYWORD/{print $0}' FILENAME

要过滤一个文件,我如何修改命令以便只打印最后n行?

sxissh06

sxissh061#

为了只在awk中做到这一点,而不需要通过tail或其他任何东西进行额外的过滤,我们可以构建一个N元素FIFO缓冲区,将所有匹配放入其中。然后,我们只需在完成后从缓冲区中转储相关内容。

BEGIN { N = 10; i = 0 }

/keyword/ { fifo[i] = $0; i = (i + 1) % N }

END { for (x = -N; x < 0; x++)
      { j = (i + x + N) % N
        if (fifo[j])
           print fifo[j] } }

相关问题