2014-04-13 103 views
0

我想比較兩個文件的第一列。如果存在匹配打印從第一文件中的第一和第二列的對應值到第二文件
awk比較並將匹配追加到另一個文件中

file1的
apple,1,2
orange,2,3
pine,3,4

file2的
apple,2,2
orange,4,5

所需的輸出
apple,2,2,1,2
orange,4,5,2,3

我能夠awk -F, 'NR==FNR{_1[$1]++;next}_1[$1]' file2 file1找到匹配,但不知道如何將文件1的值追加到文件2

回答

2

怎麼樣:

join -t',' file2 file1 

如果你喜歡用awk做:

awk -F',' 'NR==FNR{a[$1]=$0;sub(/^[^,]*,/,"",a[$1]);next}$1 in a{print $0 FS a[$1]}' f1 f2 
+0

感謝'awk' @kent,如果你解釋這將是巨大的。 join命令不工作 '貓file2' 蘋果,2,2- 橙,4,5- '貓file1' 蘋果,1,2- 松樹,3,43 橙,2,3-'加入-t 「,」file2 file1'只給出蘋果,2,2,1,2作爲結果 – Marjer

+0

@GanzRicanz它(awk一)非常簡單,哪一部分你沒有得到? – Kent

+0

+1加入命令 – BMW

2

你可以使用join

join -t "," file2 file1 

或者你awk擴展:

awk -F, 'NR==FNR{_1[$1]++;_2[$1]=FS $2 FS $3;next}_1[$1]{print $0 _2[$1]}' file2 file1 
+0

感謝awk @mark,如果你解釋它會很好。加入命令不工作cat file2 apple,2,2 orange,4,5 cat file1 apple,1,2 pine,3,43 orange,2,3 join -t「,」file2 file1只給蘋果,2,2 ,結果爲1,2 – Marjer

+0

awk和你的一樣,只是它存儲由字段分隔符(FS)在數組_2 []中分隔的字段2和3。然後,打印時,它會打印file2($ 0)中的整行以及它從file1保存的字段2和3。 –

+0

我很驚訝「加入」命令不起作用。你的文件中有怪異的字符嗎?嘗試運行「cat -vet file [12]」並查找^ M。如果你有一些,請嘗試運行「dos2unix file1」等。 –

相關問題