我有一个包含许多不同文件的文件夹。 我想显示文件列表最后100行的特定行。
到目前为止,我已经尝试了Grep和Tail,但都没有给我我想要的东西:
示例:该文件夹包含以下文件:
file_n.txt 的内容为:
目标: 仅列出每个 file_n.txt 的最后10行的 test_result (第90行到第99行)
到目前为止我尝试过:
tail -n 10 file_* | grep test_result
上面的显示几乎是我需要的,但我也需要每个结果的文件名来自,但对于我的生活,我无法弄清楚如何去做。
答案 0 :(得分:2)
使用ENDFILE的GNU awk:
$ seq 20 > file1
$ seq 30 > file2
$ awk '/5/{hits[FNR]=$0} 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
。
答案 1 :(得分:1)
你可以这样做:
tail -n10 file* |grep -e '==>' -e 'test_result'
这是有效的,因为默认情况下尾部与globs(*)一起使用时会打印文件名,如下面的文字:
$ tail -n10 file*
==> file5 <==
home
help
variables
compatibility
#modelines
==> file6 <==
[ $# != 2 ] && echo ok;
==> file7 <==
11
请注意,这将打印与以下内容不匹配的文件名:
==> file1 <==
==> file2 <==
==> file3 <==
test_result: XXXX
==> file4 <==
此行为可能是也可能不可接受(我个人想知道与test_result不匹配的文件)
答案 2 :(得分:1)
for f in file_*
do
echo "$f"
tail -n 10 "$f" | grep test_result
done