子目录中按字母顺序排列的最后一个文件的 grep 字符串

子目录中按字母顺序排列的最后一个文件的 grep 字符串

我需要在一组文件中查找字符串“使用的总 CPU 时间”,这些文件是在大量名为folder_Afolder_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_3folder_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 为您正在搜索的字符串。

我使用-Fwith 是grep因为我正在寻找固定字符串而不是正则表达式。

如果您想在输出中另外获取文件的文件名grep,则可以将 on 标记/dev/null为最后一个参数grepgrep在匹配多个文件操作数时将包含文件名),或者使用grepwith -H,如果您grep支持的话。

相关内容