2017-06-14 95 views
1

我首先應該感謝大家對本網站上的所有答案。我花了很多時間閱讀他們,但還沒有發現任何符合我的問題。因此,我自己的職位。在文件夾上使用awk並將文件名添加到輸出行中

我有一個文件夾中有多個子文件夾和txt文件。在這些文件的第7列中,有基因名稱(我爲生存做遺傳學:))。這些是我想要提取的字符串。不久,我想在整個文件夾中搜索包含特定基因名稱/字符串的任何文件中的任何行。我一直用grep這個,寫東西,如:

grep -r GENE . > GENE.txt 

簡單,但我需要能夠進一步調整搜索,似乎再AWK是要走的路。

所以我嘗試使用awk。我寫的是這樣的:(?現在我可以指定字符串必須是在一個特定的列,這我不能使用grep做,右)

awk '$7 == "GENENAME"' FOLDER/* > GENENAME.txt 

這種運作良好。 然而,與grep相比,它在每行開頭寫入文件名,現在我不能直接看到哪個文件在我的輸出文件中的哪一行來自哪個文件(大多數情況下會破壞搜索點)。這樣,在每行的某處添加原始文件的名稱似乎是絕對可行的,但我無法弄清楚。

我在搜索範圍內搜索的文件(或更確切地說是更多),但否則我的搜索將始終是在同一個大文件夾的第7列中的某些特定字符串。我怎樣才能得到這個工作?

謝謝你在前進, 伊麗莎白·ê

+0

*在每行的某個位置添加源文件的名稱* - 不清楚 – RomanPerekhrest

+0

那麼,如果您知道如何定義一個列,例如,您可以使'grep'只搜索某個特定列。 'seq 10 | tr'\ n'''| grep -E'^([^] +){6} 7''。 –

回答

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 
+0

@karakfa謝謝,忘了改變它!這是一個錯字,我在sample.csv中只有一列,我添加了數值列以使我的帖子清晰 – haifzhan

0

聽起來你正在尋找:

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

如果沒有,那麼編輯您的問題與樣本輸入和期望輸出澄清。

相關問題