对于给定数量的文件,如何显示最后几行中的几行?

How to display a few line from the last few lines for a given number of files?

我有一个包含许多不同文件的文件夹。 我想显示文件列表最后 100 行中的特定行。

到目前为止,我已经尝试了 Grep 和 Tail,但都没有给我想要的东西:

示例:文件夹中有以下文件:

file_n.txt的内容是:

目标: 只列出每个 file_n.txt 的最后 10 行的 test_result(第 90 行到第 99 行)

到目前为止我尝试过的:

tail -n 10 file_* | grep test_result

上面几乎显示了我所需要的,但我还需要每个结果的文件名来自,但我一直不知道该怎么做。

你可以这样做:

tail -n10 file* |grep -e '==>' -e 'test_result'

这是可行的,因为默认情况下,当与 globs (*) 一起使用时,tail 将打印如下文件名:

$ tail -n10 file*
==> file5 <==
home
help
variables
compatibility
#modelines

==> file6 <==
[ $# != 2 ] && echo ok;

==> file7 <==
11

请注意,这将打印不匹配的文件名,例如:

==> file1 <==
==> file2 <==
==> file3 <==
test_result: XXXX
==> file4 <==

这种行为可能会也可能不会被接受(我个人想知道不匹配的文件 test_result)

for f in file_*
do
    echo "$f"
    tail -n 10 "$f" | grep test_result
done

对于 ENDFILE 使用 GNU awk:

$ seq 20 > file1
$ seq 30 > file2

$ awk '/5/{hits[FNR]=[=10=]} ENDFILE{for (i=FNR-10;i<=FNR;i++) if (i in hits) print FILENAME, hits[i]; delete hits}' file1 file2
file1 15
file2 25

以上打印出每个输入文件最后 10 行出现的所有数字 5