我有两个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
如何实现这一目标?请帮助
答案 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