根据文件名列表从目录中的文件打印一些行
问题描述:
我试图从基于正则表达式的目录中的许多文件打印特定的行。我有一个文件名列表和一个包含这些文件的目录。我只能弄清楚如何打印目录中所有文件的行。但我需要的只是来自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'循环似乎工作。
答
您可以使用xargs的和awk:
xargs -a filename.txt awk '/Mm10/ { print FILENAME, $0 }' > results.txt
+0
这工作!谢谢。 – user210432
前缀代码/数据有四个空格。请看[编辑帮助](http://stackoverflow.com/editing-help)。 – Cyrus