awk |在字段匹配的基础上合并文件中的连续3行

awk |在字段匹配的基础上合并文件中的连续3行,awk,Awk,输入-file1.txt abc message=sent session:111,x,y,z pqr message=receive session:111,4,5,7 abc message=sent session:123,x,y,z pqr message=receive session:123,4,5,7 pqr message=receive session:123,4x,5x,7x pqr message=receive session:123,4p,5q,7r abc messa

输入-file1.txt

abc message=sent session:111,x,y,z
pqr message=receive session:111,4,5,7
abc message=sent session:123,x,y,z
pqr message=receive session:123,4,5,7
pqr message=receive session:123,4x,5x,7x
pqr message=receive session:123,4p,5q,7r
abc message=sent session:342,x,y,z
abc message=receive session:311,x,y,z
abc message=sent session:589,x,y,z
pqr message=receive session:589,4,5,7
abc message=sent session:111,x,y,z,pqr message=receive session:111,4,5,7
abc message=sent session:123,x,y,z,pqr message=receive session:123,4,5,7,pqr message=receive session:123,4x,5x,7x,pqr message=receive session:123,4p,5q,7r
abc message=sent session:342,x,y,z,NOMATCH
abc message=receive session:311,x,y,z,NOMATCH
abc message=sent session:589,x,y,pqr message=receive session:589,4,5,7
输出

abc message=sent session:111,x,y,z
pqr message=receive session:111,4,5,7
abc message=sent session:123,x,y,z
pqr message=receive session:123,4,5,7
pqr message=receive session:123,4x,5x,7x
pqr message=receive session:123,4p,5q,7r
abc message=sent session:342,x,y,z
abc message=receive session:311,x,y,z
abc message=sent session:589,x,y,z
pqr message=receive session:589,4,5,7
abc message=sent session:111,x,y,z,pqr message=receive session:111,4,5,7
abc message=sent session:123,x,y,z,pqr message=receive session:123,4,5,7,pqr message=receive session:123,4x,5x,7x,pqr message=receive session:123,4p,5q,7r
abc message=sent session:342,x,y,z,NOMATCH
abc message=receive session:311,x,y,z,NOMATCH
abc message=sent session:589,x,y,pqr message=receive session:589,4,5,7
备注:

abc message=sent session:111,x,y,z
pqr message=receive session:111,4,5,7
abc message=sent session:123,x,y,z
pqr message=receive session:123,4,5,7
pqr message=receive session:123,4x,5x,7x
pqr message=receive session:123,4p,5q,7r
abc message=sent session:342,x,y,z
abc message=receive session:311,x,y,z
abc message=sent session:589,x,y,z
pqr message=receive session:589,4,5,7
abc message=sent session:111,x,y,z,pqr message=receive session:111,4,5,7
abc message=sent session:123,x,y,z,pqr message=receive session:123,4,5,7,pqr message=receive session:123,4x,5x,7x,pqr message=receive session:123,4p,5q,7r
abc message=sent session:342,x,y,z,NOMATCH
abc message=receive session:311,x,y,z,NOMATCH
abc message=sent session:589,x,y,pqr message=receive session:589,4,5,7
  • 查找已发送及其即时接收-仅用于匹配的会话号
  • 将所有会话匹配的“接收”与相同的“发送”组合起来。例如:会话:123
  • 如果没有“接收”,则打印NOMATCH
  • 试试这个:

    awk -F "[:,]"  '{split($2,a,",");if($1~/sent/){if(prev!~/receive/&& NR!=1)print prev,"NOMATCH";else if (NR!=1)print prev;prev=$0;session=a[1];}if($1~/receive/&&session==a[1]){prev=prev","$0;}}'END'{if(prev~/receive/)print prev;}' file1.txt
    
    测试:

    >cat temp
    abc message=sent session:111,x,y,z
    pqr message=receive session:111,4,5,7
    abc message=sent session:123,x,y,z
    pqr message=receive session:123,4,5,7
    pqr message=receive session:123,4x,5x,7x
    pqr message=receive session:123,4p,5q,7r
    abc message=sent session:342,x,y,z
    abc message=receive session:311,x,y,z
    abc message=sent session:589,x,y,z
    pqr message=receive session:589,4,5,7
    > 
    > 
    > 
    > awk '{x=substr($3,0,match($3,","));a[x]?a[x]=a[x]","$0:a[x]=$0}END{for(i in a){print a[i],a[i]~/sent/&&a[i]~/receive/?"":"NOMATCH"}}' temp
    abc message=sent session:111,x,y,z,pqr message=receive session:111,4,5,7 
    abc message=sent session:123,x,y,z,pqr message=receive session:123,4,5,7,pqr message=receive session:123,4x,5x,7x,pqr message=receive session:123,4p,5q,7r 
    abc message=receive session:311,x,y,z NOMATCH
    abc message=sent session:589,x,y,z,pqr message=receive session:589,4,5,7 
    abc message=sent session:342,x,y,z NOMATCH
    > 
    

    谢谢你,戈帕尔。。但产出不同。。最后一张唱片不知怎么的漏掉了,这和你之前问的问题不一样吗?不这一次,我们尝试合并符合条件的所有行。。以前我们只合并了两行。我知道这是一样的,但我试图修改以前的帖子,但没有成功。@VipinChoudhary,为什么你在第一次合并时删除了
    pqr
    ,而没有删除其他的呢?对不起。。那是打字错误。。现在改正