首先,我要感谢大家为本网站的答案所做的所有工作。我花了很多时间阅读它们,但还没有发现任何适合我的问题。因此,我自己的帖子。
我有一个包含多个子文件夹和txt文件的文件夹。在这些文件的第7列中,有基因名称(我为生活做遗传学:))。这些是我想要提取的字符串。不久,我想在整个文件夹中搜索包含特定基因名称/字符串的任何文件中的任何行。我一直在使用grep,编写类似的东西:
grep -r GENE . > GENE.txt
很简单,但我需要能够进一步调整搜索,似乎awk是要走的路。
所以我尝试使用awk。我写了这样的话:
awk '$7 == "GENENAME"' FOLDER/* > GENENAME.txt
这很好用(现在我可以指定字符串必须在特定的列中,这个我不能用grep做,对吧?)。 但是,与在每行开头写入文件名的grep相比,我现在无法直接查看输出文件中哪一行来自哪个文件(这主要取决于搜索点)。这个,将原始文件的名称添加到每一行的某个地方,似乎应该是绝对可行的,但我无法弄明白。
我正在搜索的文件发生变化(或者更多),但是否则我的搜索将始终是同一个大文件夹的第7列中的某些特定字符串。我怎样才能使这个工作?
提前谢谢你, Elisabet E
答案 0 :(得分:3)
您可以使用FNR
(FNR表示记录的文件编号)打印行号,并使用FILENAME
打印文件名,然后从文件和哪行中获取匹配的行,实例:
sample.csv:
aaa 123
bbb 456
aaa 789
命令:
awk '$1 =="aaa"{print $0, FNR, FILENAME}' sample.csv
输出结果为:
aaa 123 1 sample.csv
aaa 789 3 sample.csv
答案 1 :(得分:0)
听起来像你在寻找:
awk '$7 == "GENENAME"{print FILENAME, $0}' FOLDER/*
如果没有,那么编辑你的问题以澄清样本输入和预期输出。