如果匹配 id,则将文件名附加到 csv 文件

如果匹配 id,则将文件名附加到 csv 文件

我有两个文件

文件1

159211;exampleimage002.JPG
159212;example.jpg
159212;example with space.jpg
...

文件2

13;"OVET";"O1";"OVET/ULKO-OVET";159212;"JELDWEN BASIC 0015 9*21 VASEN";"KPL";1;345;1;0;"Toinen testituote";
13;"OVET";"O1";"OVET/ULKO-OVET";159211;"JELDWEN BASIC 0015 9*21 OIKEA";"KPL";1;345;1;0;"Myös rivinvaihdot siirtyvät";
...

我需要的是将图像名称添加为新列,多个图像文件用“|”分隔。 ID 必须匹配,例如 159212(文件 1 第一列和文件 2 第五列)。我尝试使用 awk 进行此操作,但惨败。

想要输出(file3),唯一的区别是最后一列:

13;"OVET";"O1";"OVET/ULKO-OVET";159212;"JELDWEN BASIC 0015 9*21 VASEN";"KPL";1;345;1;0;"Toinen testituote";"exampleimage002.JPG";
13;"OVET";"O1";"OVET/ULKO-OVET";159211;"JELDWEN BASIC 0015 9*21 OIKEA";"KPL";1;345;1;0;"Myös rivinvaihdot siirtyvät";"example.jpg|example with space.jpg";

答案1

怎么样

awk -F\; '
  NR==FNR {
    if (a[$1]=="") {
      a[$1]="\""$2
    } else {
      a[$1]=a[$1]"|"$2
    }
    next;
  }
  {
    print $0 a[$5] "\""
  }
  ' file1 file2 > file3

注意:这假设每个 ID 至少有一个匹配项 - 否则您可能会得到一个虚假的尾随关闭引号。如果这是一个问题,您可以在a[$5]打印之前添加一个非空测试。

相关内容