我有兩個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
這是如何實現的?請幫助
我有兩個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
這是如何實現的?請幫助
假設這兩個文件具有相同的行數,並且您試圖從兩個文件中檢查相同的行號。 (即檢查從免受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
注意,如果這是不是你所尋找的,請說明您的要求和答案將被更新(或刪除)
嗨@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
假設你只是想匹配的任何行匹配的$ 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
能爲您提供更相關和有代表性的輸入文件?目前,'paste -d「,」a b'就足夠了。 – fedorqui 2014-10-29 14:30:09
是兩個文件具有相同的行數?你想檢查同一行(數字)嗎? – Kent 2014-10-29 14:34:01
嗨肯特 我必須檢查a.csv中的第五列的值和b中的第三列是否匹配,如果匹配則值應該合併。 – 2014-10-29 14:36:24