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