sed – awk |在场匹配的基础上合并线

前端之家收集整理的这篇文章主要介绍了sed – awk |在场匹配的基础上合并线前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要以下帮助:

输入文件

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.

猜你在找的Linux相关文章