shell脚本以匹配列并将新列从文件添加到表中

时间:2018-09-27 19:48:20

标签: linux shell file join awk

我正在尝试编写一个Shell脚本来比较两个单独的文件,并在地址和LocationID匹配时将x / y / objectID / Status / Data信息添加到第一个文件中。这是我的文件的样子:

FileA.csv:

MAC     LocationID     Node_ID     Street     City     State     Zip_Code
ABC123  182            AB12        25_Main_St Hanover  WZ        12345
CDE123  128            CD12        35_Main_St Hooray   TZ        23456
EFG123  812            EF12        45_Main_St Hello    WA        45678

FileB.csv

objectid  Status  Data   X        Y       LocationID     Node_ID     Street     City     State     Zip_Code
555       RRR     sss    123456   123444  182            AB12        25_Main_St Hanover  WZ        12345
666       GGG     ttt    234567    87978  128            CD12        35_Main_St Hooray   TZ        23456
777       RRR     uuu    54321     98765  812            EF12        45_Main_St Hello    WA        45678

我很难找到与Linux Shell脚本示例类似的东西。有谁有建议的方式来加入这两个文件?结果如下:

MAC       objectid  Status  Data   X        Y       LocationID     Node_ID     Street     City     State     Zip_Code
ABC123    555       RRR     sss    123456   123444  182            AB12        25_Main_St Hanover  WZ        12345
CDE123    666       GGG     ttt    234567   87978   128            CD12        35_Main_St Hooray   TZ        23456
EFG123    777       RRR     uuu    54321    98765   812            EF12        45_Main_St Hello    WA        45678

请注意,文件的顺序不一定相同,并且Mac文件中的行多于非Mac文件中的行。 Mac文件具有重复的LocationID和地址,但是Mac都不同。非Mac文件将没有重复的LocationID或地址。

1 个答案:

答案 0 :(得分:0)

您可以使用awk

awk 'FNR == NR{k[$2]=$1; next} $6 in k{print k[$6], $0}' fileA fileB | column -t

MAC     objectid  Status  Data  X       Y       LocationID  Node_ID  Street      City     State  Zip_Code
ABC123  555       RRR     sss   123456  123444  182         AB12     25_Main_St  Hanover  WZ     12345
CDE123  666       GGG     ttt   234567  87978   128         CD12     35_Main_St  Hooray   TZ     23456
EFG123  777       RRR     uuu   54321   98765   812         EF12     45_Main_St  Hello    WA     45678
  • column -t已用于以表格形式格式化输出。
  • 在第一遍中,我们处理fileA并将具有键的第一列作为第二列存储在关联数组k
  • 在第二遍中,我们处理fileB并通过使用密钥作为第六列(即LocationID)来获取mac地址。