根据第1列合并csv unix

时间:2016-05-01 00:04:33

标签: html unix awk

您好我有两个csv文件具有相同的列,如

x.csv

column1,column2
A,2 
B,1

y.csv

column1,column2
A,1
C,2

我希望输出如下:

z.csv

column1,column2
A,2
B,1
C,2

即。对于第一列中的匹配数据,我想保留x.csv记录和y.csv中的新字段(如A,2)我只想追加它(如C,2)。< / p>

由于

1 个答案:

答案 0 :(得分:3)

$ awk -F, 'NR==FNR{a[$1]; print; next} ! ($1 in a)' x.csv y.csv
column1,column2
A,2 
B,1
C,2

如何运作

  • -F,

    这告诉awk使用逗号作为字段分隔符

  • NR==FNR{a[$1]; print; next}

    在阅读第一个文件(NR==FNR)时,这会告诉awk(a)将$1添加为关联数组a的关键字,(b)打印该行, (c)跳过剩余的命令并跳转到文件中的next行。

  • ! ($1 in a)

    如果我们到达这里,那意味着我们正在处理第二个文件。在这种情况下,如果第一个字段不是数组a的键(换句话说,如果第一个字段没有出现在第一个文件中),我们会打印该行。