我有两个csv文件,我想“合并”它们并用CSV2中的数据丰富CSV1。他们两个都有相同的B列。
CSV1:
A,B,C,D,E
1,2,3,,
1,2,3,,
1,2,3,,
CSV2:
B,D,E
2,4,5
2,4,5
2,4,5
我想要:
A,B,C,D,E
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
哪个是最好的方法?考虑文件有2百万行。
答案 0 :(得分:0)
使用CSV1
从CSV2
提取第1至3列,从cut
提取2和3,并使用paste
与自定义定界符,
合并它们。 / p>
$ paste -d, <(cut -d, -f1-3 CSV1) <(cut -d, -f2,3 CSV2)
A,B,C,D,E
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
答案 1 :(得分:0)
这是awk循环file1
并使用getline
从file2
中读取的内容之一:
$ awk 'BEGIN {
FS=OFS="," # separators
file="file2" # set file2 name
}
{
printf "%s,%s,%s",$1,$2,$3 # output from file1
print (getline < file > 0? OFS $2 OFS$3:"") # and from file2 if records left
}
END { # after processing file1...
while(getline < file) # continue with lines from...
print "","","",$2,$3 # file2 if any left
}' file1
如果file2
> file1
(>表示记录数),则输出:
A,B,C,D,E
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
,,,4,5
,如果file1
> file2
:
A,B,C,D,E
1,2,3,4,5
1,2,3,4,5
1,2,3