如何根据两列的匹配来合并两个文件? CSV

如何根据两列的匹配来合并两个文件? CSV

我喜欢 file1:

6688249-7,03/02/2017,5515,2017 年 2 月 2 日

16914917-8,03/02/2017,5521,2017 年 2 月 2 日

还有一个文件2:

5515,6688249-7,06-02-2017 04:25:47 PM,ASIG,伊丽莎白·普列托

5515,6688249-7,06-02-2017 04:56:32 PM,URR,伊丽莎白·普里托

5521,16914917-8,06-02-2017 12:51:04 PM,ASIGN,SOLANGE

5521,16914917-8,27-02-2017 04:32:11 PM,例如,SOLANGE

并且想要一个 file3 这样:

6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:25:47 PM,ASIG,伊丽莎白·普列托

6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:56:32 PM,URR,伊丽莎白·普里托

16914917-8,03/02/2017,5521,02-feb-17,06-02-2017 12:51:04 PM,ASIGN,SOLANGE

16914917-8,03/02/2017,5521,02-feb-17,27-02-2017 04:32:11 PM,Ex,SOLANGE

意思是通过第2列的key将file2的第3,4,5列放到file1中(第3列file1,第1列file1)

答案1

像这样的东西应该足够了:

awk 'BEGIN{FS=OFS=","}NR==FNR{a[$3]=$0;next}$1 in a{print a[$1],$3,$4,$5}' file1 file2

答案2

如果输出排序顺序无关紧要,这看起来像是一个工作join

join -1 3 -2 1 -t, -o 1.1,1.2,1.3,1.4,2.3,2.4,2.5 <(sort -k3,3 -t, file1) \
    <(sort -k1,1 -t, file2)


6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:25:47 PM,ASIG,ELIZABETH PRIETO
6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:56:32 PM,URR,ELIZABETH PRIETO
16914917-8,03/02/2017,5521,02-feb-17,06-02-2017 12:51:04 PM,ASIGN,SOLANGE
16914917-8,03/02/2017,5521,02-feb-17,27-02-2017 04:32:11 PM,Ex,SOLANGE

需要根据连接键对输入join进行排序,上面的示例使用进程替换(受诸如 等 shell 支持bash)来实现

相关内容