我一直在用
awk '/KEYWORD/{print $0}' FILENAME
要过滤一个文件,我如何修改命令以便只打印最后n行?
sxissh061#
为了只在awk中做到这一点,而不需要通过tail或其他任何东西进行额外的过滤,我们可以构建一个N元素FIFO缓冲区,将所有匹配放入其中。然后,我们只需在完成后从缓冲区中转储相关内容。
awk
tail
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] } }
1条答案
按热度按时间sxissh061#
为了只在
awk
中做到这一点,而不需要通过tail
或其他任何东西进行额外的过滤,我们可以构建一个N元素FIFO缓冲区,将所有匹配放入其中。然后,我们只需在完成后从缓冲区中转储相关内容。