我需要在一组文件中查找字符串“使用的总 CPU 时间”,这些文件是在大量名为folder_A
、folder_B
等的子文件夹中通过迭代计算生成的folder_C
。
所以folder_A
我会
file_1_1 file_1_2 file_1_3 file_1_4 file_1_5 file_2_1 file_2_2 file_2_3
旁边有一些其他具有不同名称的文件。里面folder_B
会有
file_1_1 file_1_2 file_1_3 file_1_4 file_1_5 file_2_1 file_2_2 file_2_3 file_2_4 file_2_5 file_3_1
等等,因此每个子文件夹将包含不同数量的迭代步骤,因此附加最后一个文件的数量也不同。我认为要走的路是使用递归grep
排序按字母顺序排列的最后一个文件,我尝试过的代码是:
grep -r "Total CPU time used" */file_* | tail -1
然而,这只给我最后一个目录中最后一个文件的输出folder_Z
。如何从所有子目录中 grep 字符串,以便folder_A/file_2_3
不folder_B/file_3_1
跳过 、 等?
答案1
它为tail -1
您提供了调用结果的最后一行grep
。这可能来自最后一个目录中最后一个文件的匹配。
相反,您将需要循环遍历目录。这是使用bash
:
for dir in folder_*/; do
files=( "$dir"/file_* )
grep -F 'Total CPU time used' "${files[-1]}"
done
这将迭代目录。对于每个目录,最后一个文件(在字典顺序意义上)将被 grep 为您正在搜索的字符串。
我使用-F
with 是grep
因为我正在寻找固定字符串而不是正则表达式。
如果您想在输出中另外获取文件的文件名grep
,则可以将 on 标记/dev/null
为最后一个参数grep
(grep
在匹配多个文件操作数时将包含文件名),或者使用grep
with -H
,如果您grep
支持的话。