我需要以下帮助:
输入文件:
abc message=sent session:111,x,y,z pqr message=receive session:111,4,5,7 abc message=sent session:123,z pqr message=receive session:123,7 abc message=sent session:342,z abc message=sent session:589,z pqr message=receive session:589,7
abc message=sent session:111,z,pqr message=receive session:111,pqr message=receive session:123,NOMATCH abc message=sent session:589,pqr message=receive session:589,7
笔记:
如果你在源文件中看到,对于每个“发送”消息,都有“接收”
仅对于session = 342,没有接收
会话是未知的,不能硬编码
因此,只合并那些我们有匹配会话号的发送和接收
解决方法
其他方式:
awk -F "[:,]" '/=sent/{a[$2]=$0;}/=receive/{print a[$2],$0;delete a[$2];}END{for(i in a)print a[i],"NO MATCH";}' file
结果:
abc message=sent session:111,z pqr message=receive session:111,z pqr message=receive session:123,7 abc message=sent session:589,z pqr message=receive session:589,z NO MATCH
遇到发送记录时,它会以会话ID作为索引存储在数组中.遇到接收记录时,将从阵列中获取发送记录并与接收记录一起打印.此外,在收到接收记录时,已从阵列中删除已发送的记录.在END处,数组中的所有剩余记录都打印为NO MATCH.