我有一个包含多个子目录的目录,这些子目录包含许多文件,我对*.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 - '阅读(没有这样的文件或目录)
这里可能出现什么问题?
答案 0 :(得分:1)
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
{1}}作为去限制器。如果匹配,则在返回的文件上使用grep
返回文件中的行。