根据文件名列表从目录中的文件打印一些行

时间:2017-09-12 17:20:09

标签: python bash awk grep

我正在尝试从基于正则表达式的目录中的许多文件中打印特定行。我有一个文件名列表和一个包含这些文件的目录。我只能弄清楚如何从目录中的所有文件打印行。但我需要的只是来自filename.txt列表中文件的打印行。

for f in ForPAML/*.paml; do grep -m 1 'Mm10' "$f"; done

我使用上面的内容从目录中的所有文件中打印出Mm10的行。

filename.txt看起来像:

Mus_Rn5_.02.aa.fa.afa.paml
Mus_Rn5_.03.aa.fa.afa.paml
Mus_Rn5_.04.aa.fa.afa.paml
Mus_Rn5_.07.aa.fa.afa.paml

该目录包含这些文件以及更多文件。

例如文件Mus_Rn5_.03.aa.fa.afa.paml就像这样。

 2     54
Mm10-chr19:41729055-41729126
ACACTCGAAGCTGCTGGCCAGCAAAGTCATTCTTGTGGATCCGAGTGTTGTTGC
1:268429604-268429675
ACACTCGAAGCTGCTGCCCAGCAAAGTCATTCTTATGGATCCGAGTATTGTTAC

我需要将包含'Mm10'的所有行以及文件名打印到新文件中。像这样的东西     Mus_Rn5_.02.aa.fa.afa.paml Mm10-chr19:41729055-41729126     Mus_Rn5_.03.aa.fa.afa.paml Mm10-chr11:34068938-34068969     Mus_Rn5_.04.aa.fa.afa.paml Mm10-chr11:34069868-34069905

...

此外,目录中的文件数量太多,所以我最终得到“参数列表太长”错误这就是我使用'for'循环的原因,这似乎是有用的。

1 个答案:

答案 0 :(得分:1)

您可以使用xargs和awk:

xargs -a filename.txt awk '/Mm10/ { print FILENAME, $0 }' > results.txt