我正在尝试编写一个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或地址。
答案 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地址。