对于给定数量的文件,如何显示最后几行中的几行?
How to display a few line from the last few lines for a given number of files?
我有一个包含许多不同文件的文件夹。
我想显示文件列表最后 100 行中的特定行。
到目前为止,我已经尝试了 Grep 和 Tail,但都没有给我想要的东西:
示例:文件夹中有以下文件:
- file_1.txt
- file_2.txt
- file_3.txt
- other_file.txt
- other_file2.txt
file_n.txt的内容是:
- 第 88 行:test_result:18209102
- 第 89 行:再见
- ......
- 第 98 行:test_result:18202232
- 第 99 行:再见
目标:
只列出每个 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
。
我有一个包含许多不同文件的文件夹。 我想显示文件列表最后 100 行中的特定行。
到目前为止,我已经尝试了 Grep 和 Tail,但都没有给我想要的东西:
示例:文件夹中有以下文件:
- file_1.txt
- file_2.txt
- file_3.txt
- other_file.txt
- other_file2.txt
file_n.txt的内容是:
- 第 88 行:test_result:18209102
- 第 89 行:再见
- ......
- 第 98 行:test_result:18202232
- 第 99 行:再见
目标: 只列出每个 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
。