使用列引用连接两个csv文件

时间:2017-11-14 14:32:31

标签: shell csv join

我有两个csv文件 文件1:

firstName    lastName     internalId      email         phoneNumber
XX           YY           123             xx@mail.fr    003312345600
ZZ           QQ           147             zz@mail.fr    003371236500
KK           JJ           159             kk@mail.fr    003369865300

文件2:

internalId    email        phoneNumber
159           ss@mail.fr   003379632500
147           ee@mail.fr   003396325200

我想加入文件1和文件2来获得此结果

firstName    lastName     internalId      email         phoneNumber
XX           YY           123             xx@mail.fr    003312345600
ZZ           QQ           147             ee@mail.fr    003396325200
KK           JJ           159             ss@mail.fr    003369865300

修改电子邮件和phoneNumber如果找到相同的internalId,如果不是我保持相同的值

2 个答案:

答案 0 :(得分:1)

awk 解决方案:

awk 'NR==FNR{ a[$1]=$2 FS $3; next }
     FNR>1 && ($3 in a){ split(a[$3], b); $4=b[1]; $5=b[2] }1' file2 file1 | column -t
  • NR==FNR - 处理第一个输入文件,即file2

  • a[$1]=$2 FS $3 - 使用文件a的第二个$2和第三个字段$3的连接值填充数组file2(即{{ 1}}和email)使用第一个字段值phoneNumber对其进行索引,即$1

  • internalId - 处理第二个输入文件FNR>1 && ($3 in a),在匹配的file1上进行替换

输出:

internalId

答案 1 :(得分:0)

我假设你需要在你的标签中使用shell进行此操作

看起来像是this的副本。 Join命令是你的朋友