2014-10-29 58 views
0

我有兩個csv文件a.csv和b.csv。在a.csv第五列和第三列b.csv有值,例如在csv和merge中匹配列

a.csv 
1,2,3,4,5 

b.csv 
7,6,5,9 

如果第五列中的值和第三列的b中的值相匹配所得CSV具有

result.csv  
1,2,3,4,5,7,6,9 

這是如何實現的?請幫助

+1

能爲您提供更相關和有代表性的輸入文件?目前,'paste -d「,」a b'就足夠了。 – fedorqui 2014-10-29 14:30:09

+1

是兩個文件具有相同的行數?你想檢查同一行(數字)嗎? – Kent 2014-10-29 14:34:01

+0

嗨肯特 我必須檢查a.csv中的第五列的值和b中的第三列是否匹配,如果匹配則值應該合併。 – 2014-10-29 14:36:24

回答

0

假設這兩個文件具有相同的行數,並且您試圖從兩個文件中檢查相同的行號。 (即檢查從免受b.csv 3號線a.csv 3號線),這會工作:

awk -F, -v OFS="," 'NR==FNR{a[NR]=$3;w[NR]=$1 FS $2 FS $4;next} 
        a[FNR]==$5{print $0, w[FNR]}' b a 

例如:

kent$ head a b 
==> a <== 
1,2,3,4,5 
1,2,3,4,7 
1,2,3,4,8 

==> b <== 
7,6,5,9 
7,6,x,9 
7,6,8,9 

kent$ awk -F, -v OFS="," 'NR==FNR{a[NR]=$3;w[NR]=$1 FS $2 FS $4;next}a[FNR]==$5{print $0, w[FNR]}' b a 
1,2,3,4,5,7,6,9 
1,2,3,4,8,7,6,9 

注意,如果這是不是你所尋找的,請說明您的要求和答案將被更新(或刪除)

+0

嗨@Kent 沒有行號匹配。如果我不得不對我更具體一些,例如我在'a.csv'中只有一行,它有'a,b,c,d,g',我有b.csv,它有三行,'g '在第三行,就像f,h,g。現在結果集必須是'a,b,c,g,f,h'。希望我清楚。 – 2014-10-29 15:23:32

0

假設你只是想匹配的任何行匹配的$ 24和$ 5

awk -F, -vOFS="," 'NR==FNR{x=$3;$3=$4;NF--;a[x]=x","$0;}$5=a[$5]' file2 file1 

如果你只是想對同一行號

awk -F, -vOFS="," 'NR==FNR{x=$3;$3=$4;NF--;a[x]=NR;b[x]=x","$0}FNR==a[$5]&&$5=b[$5]' file2 file1 
+0

雖然解決方案可能很好,但解釋邏輯很好。否則,由於肯特已經在工作,發佈只有一個班輪而沒有更多信息的點是什麼? – fedorqui 2014-10-29 14:55:07

+0

@fedorqui它不能傷害任何人在這裏,Kents也不解釋邏輯嗎? – 2014-10-29 14:57:34

+0

這不是關於傷害,不要誤解我的意思:)它只是通過指出你做什麼和爲什麼來增加知識。 – fedorqui 2014-10-29 15:02:36