从子目录中选择文件并打印每个文件中的某一行[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从子目录中选择文件并打印每个文件中的某一行[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有一个包含多个子目录的目录,这些子目录有很多文件,我对*.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--'进行读取(没有这样的文件或目录)
这里可能出了什么问题?
答案
Awk
不适合这个,参见why you shouldn't be parsing ls ouput,
而是使用GNU find
列出与xargs
匹配的标准文件,以限制从find
和grep
返回的输出以进行模式匹配。
find . -type f -name "*.txt" -print0 | xargs -0 grep "FAIL"
-print0 (a GNU find specific option)
在每个文件/目录的末尾添加一个NULL
字符来处理带有空格/特殊字符的文件和xargs -0
从stdin
分割输入,\0
作为去限制器。如果匹配,则在返回的文件上使用grep
返回文件中的行。
以上是关于从子目录中选择文件并打印每个文件中的某一行[重复]的主要内容,如果未能解决你的问题,请参考以下文章