2014-03-27 47 views
0

我有兩個文件,key.txt和target.txt,我想根據key.txt文件中是否存在字段來更新target.txt文件。根據第二個文件中的匹配更新文件。

key.txt

B x001 block134 10 50 
B g013 block341 10 70 
B x560 block444 30 99 
B f777 block878 50 29 

target.txt

h01 x999 3 4 
h08 x560 4 7 
h14 f777 13 55 
j88 h888 15 66 

output.txt中會是什麼樣子下面。它是具有額外列($ 5)的target.txt文件。如果target.txt中的$ 2與key.txt中的$ 2之間沒有匹配,則$ 5 ==「NM」。在匹配的情況下,key.txt中$ 3,$ 4和$ 5的信息被合併($ 3「:」$ 4「:」$ 5),並在output.txt中放置爲$ 5。

h01 x999 3 4 NM 
h08 x560 4 7 block444:30:99 
h14 f777 13 55 block878:50:29 
j88 h888 15 66 NM 

到現在爲止,我已經使用了過濾根據比賽的$ 2檔以下的,而是奮力修改它實際上合併根據比賽數據。

awk 'FNR == NR {keys[$2]; next} $2 in keys' key.txt target.txt > output.txt 

回答

1

這應該工作:

$ awk 'NR==FNR{a[$2]=$3":"$4":"$5;next}{$5=(a[$2])?a[$2]:"NM"}1' key.txt target.txt 
h01 x999 3 4 NM 
h08 x560 4 7 block444:30:99 
h14 f777 13 55 block878:50:29 
j88 h888 15 66 NM 
+1

非常好,謝謝。 – user1308144

相關問題