匹配csv中的列并合并

时间:2014-10-29 14:24:50

标签: linux awk

我有两个csv文件a.csv和b.csv。 a.csv中的第五列和第三列b.csv具有值,例如

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

b.csv
7,6,5,9

如果a中第五列的值与b中第三列的值匹配,则生成的csv必须

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

如何实现这一目标?请帮助

2 个答案:

答案 0 :(得分:0)

假设这两个文件的行数相同,并且您尝试从两个文件中检查相同的行号。 (即检查来自a.csv的第3行和来自b.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

请注意,如果这不是您要求的,请澄清您的要求,答案将更新(或删除)

答案 1 :(得分:0)

假设您只想匹配任何匹配$ 3和$ 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