在文件夹上使用awk并将文件名添加到输出行

在文件夹上使用awk并将文件名添加到输出行,awk,Awk,首先,我要感谢大家为本网站的答案所做的一切工作。我花了很多时间通读它们,但还没有找到任何适合我的问题。因此我有自己的职位 我有一个文件夹,其中包含多个子文件夹和txt文件。在这些文件的第7列中,有一些基因名称(我以遗传学为生:))。这些是我试图提取的字符串。很快,我想在整个文件夹中搜索包含特定基因名称/字符串的任何文件中的任何行。为此,我一直在使用grep,编写如下内容: grep -r GENE . > GENE.txt 很简单,但我需要能够进一步调整搜索,看来awk是一个不错的选择

首先,我要感谢大家为本网站的答案所做的一切工作。我花了很多时间通读它们,但还没有找到任何适合我的问题。因此我有自己的职位

我有一个文件夹,其中包含多个子文件夹和txt文件。在这些文件的第7列中,有一些基因名称(我以遗传学为生:))。这些是我试图提取的字符串。很快,我想在整个文件夹中搜索包含特定基因名称/字符串的任何文件中的任何行。为此,我一直在使用grep,编写如下内容:

grep -r GENE . > GENE.txt
很简单,但我需要能够进一步调整搜索,看来awk是一个不错的选择

所以我试着用awk。我写了这样的东西:

awk '$7 == "GENENAME"' FOLDER/* > GENENAME.txt 
这很好(现在我可以指定字符串必须在特定列中,这是我不能用grep做的,对吗?)。 然而,与grep不同,grep将文件名写在每一行的开头,我现在无法直接看到输出文件中的哪一行来自哪个文件(这在很大程度上破坏了搜索的重点)。这样,在每一行的某处添加源文件的名称,似乎是绝对可行的,但我无法理解

我在其中搜索的文件会发生变化(或者更确切地说是数量更多),但如果不是这样,我将始终搜索同一个大文件夹第7列中的某个特定字符串。我怎样才能让它工作

提前谢谢大家,,
Elisabet E

您可以使用
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

听起来你在寻找:

awk '$7 == "GENENAME"{print FILENAME, $0}' FOLDER/*

如果没有,则编辑您的问题,以通过示例输入和预期输出进行澄清。

将原始文件的名称添加到每行的某个位置-Unclarwell,如果您知道如何定义列,您可以使
grep
仅搜索特定列的模式,例如
seq 10 | tr'\n'.\grep-e'^([^]+){6}7'
@karakfa谢谢,忘了换了!这是一个输入错误,我的sample.csv中只有一列,我添加了数值列以使我的帖子更清晰