从子目录中选择文件并从每个文件中打印某一行

时间:2017-01-09 09:48:17

标签: bash awk

我有一个包含多个子目录的目录,这些子目录包含许多文件,我对*.txt文件感兴趣。我想转到每个子目录,阅读*.txt文件并打印与" pattern"匹配的特定行。 我宁愿把它作为一个单行。

这是我试过的命令。

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

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

  

awk:cmd。 line:1:致命:无法打开文件`-rw-rw-r - '阅读(没有这样的文件或目录)

这里可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

Awk 不适用于此,请参阅why you shouldn't be parsing ls ouput

而是使用GNU find列出符合您标准的文件xargs,以取消限制从findgrep返回的输出以进行模式匹配。

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

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