尋找兩個文件之間的模式

尋找兩個文件之間的模式

File1包含基因列表(用字母表示)。每個基因都透過它表達的蛋白質進行描述(用字母表示):

a-1
b-2
c-3

File2也包含基因列表,但每個基因都重複多次。其中一些基因與以下基因相似File1

a
a
a
b
b
c
c
c

我需要找到File1中共有的所有基因File2。常見的需要列印到第三個文件中(多份也是如此)。除此之外,基因表現的蛋白質類型也需要一起寫入(就像在 中一樣File1)。

我怎樣才能獲得以下內容File3

a-1
a-1
a-1
b-2
b-2
c-3
c-3
c-3

答案1

這是使用 gawk 執行此操作的簡單方法,它有一個內建變量,即正在處理的當前檔案的ARGIND索引。ARGV

我們拆分第一個檔案的每個輸入行,並使用第一個欄位索引到儲存整行的-陣列中。table對於第二個檔案(以及任何後續檔案),我們使用整行作為索引來table檢索所需的行。

BEGIN{FS = "-"}
ARGIND==1{table[$1] = $0}
ARGIND>1{print table[$0]}

或作為一句單行:

awk 'BEGIN{FS = "-"}; ARGIND==1{table[$1] = $0}; ARGIND>1{print table[$0]}' file_1 file_2

這是另一個適用於傳統 awk 的版本。它透過比較FNR目前輸入檔案中的輸入記錄數 和NR迄今為止看到的輸入記錄總數來確定目前檔案是否是第一個檔案。

awk -F'-' 'NR==FNR{table[$1] = $0}; NR>FNR{print table[$0]}' file_1 file_2

相關內容