我可以使用帮助将两个文件与AWK数组组合起来,使其看起来像最后的第三个文件。本质上,我希望最终文件的输出始终包含第一个文件的前两列,但仅当它们在“_”之后匹配时才添加第二个文件的头两列。即RTR1_Tu1111111111和RTR2_Tu11111111在“Tu111111111”部分匹配,因此两者都在最终文件的输出中。非常感谢。
文件1:
0x8ea11111 RTR1_Tu111111111 0x220011 Gen_IF_Port dynamicGlobalCollects 0x8ea22222 RTR1_Tu222222222 0x220011 Gen_IF_Port dynamicGlobalCollects 0x8ea33333 RTR1_Tu333333333 0x220011 Gen_IF_Port dynamicGlobalCollects 0x8ea44444 RTR1_Tu444444444 0x220011 Gen_IF_Port dynamicGlobalCollects 0x8ea55555 RTR1_Tu555555555 0x220011 Gen_IF_Port dynamicGlobalCollects
文件2:
0x10101010 RTR2_Tu111111111 0x220011 Gen_IF_Port 0x10101011 RTR3_Tu010101010 0x220011 Gen_IF_Port 0x45564566 RTR4_Tu101111111 0x220011 Gen_IF_Port 0x45245252 RTR5_Tu222222222 0x220011 Gen_IF_Port 0x45645666 RTR6_Tu000011111 0x220011 Gen_IF_Port 0x52555525 RTR7_Tu101000111 0x220011 Gen_IF_Port 0x55545636 RTR8_Tu000110101 0x220011 Gen_IF_Port 0x42244242 RTR9_Tu333333333 0x220011 Gen_IF_Port 0x56565665 RTR10_Tu100110101 0x220011 Gen_IF_Port 0x77676766 RTR11_Tu010010101 0x220011 Gen_IF_Port
最终文件输出:
0x8ea11111 RTR1_Tu111111111 0x8ea22222 RTR1_Tu222222222 0x8ea33333 RTR1_Tu333333333 0x8ea44444 RTR1_Tu444444444 0x8ea55555 RTR1_Tu555555555 0x10101010 RTR2_Tu111111111 0x45245252 RTR5_Tu222222222 0x42244242 RTR9_Tu333333333
编辑:如果可能的话,有一个只包含匹配信息输出的第二个副本也很好。
替代输出:
0x10101010 RTR2_Tu111111111 0x45245252 RTR5_Tu222222222 0x42244242 RTR9_Tu333333333
解决方案:
我用过https://earthly.dev/blog/awk-examples/并比较两个文件并打印具有匹配列awk的行作为参考。也根据Ed的评论简化为
awk -F '[_ ]+' 'NR==FNR{a[$3];next} $3 in a{print $1" "$2"_"$3}' file1 file2