关于bash:从子目录中选择文件并从每个文件中打印一行

Select files from sub-directories and print a certain line from each file

本问题已经有最佳答案,请猛点这里访问。

我有一个有几个子目录的目录,这些子目录有许多文件,我对*.txt文件感兴趣。我想转到每个子目录,读取*.txt文件并打印与"pattern匹配的行。我想把它当作一条班轮。

这是我试过的命令。

1
for i in $(ls -d *_fastqc); do cd $i; awk '/FAIL/ {print $0}' ls -l su*.txt; done

我得到一个错误命令,如下所示:

awk: cmd. line:1: fatal: cannot open file `-rw-rw-r--' for reading (No such file or directory)

这里可能出什么事了?


Awk不是用于此目的的正确工具,请看为什么不应该分析ls ouput,

相反,使用GNU find列出符合您与xargs标准的文件,用于取消限制从findgrep返回的用于模式匹配的输出。

1
find . -type f -name"*.txt" -print0 | xargs -0 grep"FAIL"

-print0 (a GNU find specific option)在每个文件/目录的末尾附加一个NULL字符,用于处理带有空格/特殊字符的文件,xargs -0stdin的输入拆分为\0作为去限制器。在返回的文件上使用grep返回文件中的行(如果匹配)。