从子目录中选择文件并打印每个文件中的某一行[重复]

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匹配的标准文件,以限制从findgrep返回的输出以进行模式匹配。

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

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

以上是关于从子目录中选择文件并打印每个文件中的某一行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从子目录中检索文件名[重复]

读取和修改文件夹中的每个文件 - Java [重复]

Crystal Report - 从子报告中打印信息

C# 从子组中选择重复项

从子进程中实时捕获标准输出

MS ACCESS 2007 - 从子表单中的组合框中选择值会创建重复值