从命令行进行CSV连接

时间:2019-05-21 13:41:23

标签: bash csv unix

我有两个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百万行。

2 个答案:

答案 0 :(得分:0)

使用CSV1CSV2提取第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并使用getlinefile2中读取的内容之一:

$ 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