-1

次のことについてサポートが必要です。

入力ファイル:

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
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
abc message=sent session:342,x,y,z, NOMATCH
abc message=sent session:589,x,y,z, pqr message=receive session:589,4,5,7

ノート:

ソースファイルに表示されている場合、すべての「送信済み」メッセージに対して「受信」があります。すべての「=送信済み」に対して、同じセッション番号についてのみ次の行
「=受信」を検索し ます。一致するセッション番号ELSEは、 session = 342の場合にのみ、送信されたものをそのままシーケンスで出力します。受信 セッションは不明であり、ハードコーディングできません。



4

1 に答える 1

0
awk 
'{
split($3,a,",");
if($2~/sent/)
 {
  if(prev!~/receive/ && NR!=1)
    print prev,"NO MATCH";prev=$0;session=a[1];
 }
if($2~/receive/&&session==a[1])
 { 
     print session, prev,$0;prev=$0
 }
}' temp

テスト済み:

> 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
abc message=sent session:342,x,y,z
abc message=sent session:589,x,y,z
pqr message=receive session:589,4,5,7

> awk '{split($3,a,",");if($2~/sent/){if(prev!~/receive/&& NR!=1)print prev,"NO MATCH";prev=$0;session=a[1];}if($2~/receive/&&session==a[1]){print session, prev,$0;prev=$0}}' temp
session:111 abc message=sent session:111,x,y,z pqr message=receive session:111,4,5,7
session:123 abc message=sent session:123,x,y,z pqr message=receive session:123,4,5,7
abc message=sent session:342,x,y,z NO MATCH
session:589 abc message=sent session:589,x,y,z pqr message=receive session:589,4,5,7
>

または、以下のように単純にコードをファイルに入れることもできます。

> cat tmp.awk
#!/usr/bin/awk

{
split($3,a,",");
if($2~/sent/)
 {
  if(prev!~/receive/ && NR!=1)
    print prev,"NO MATCH";prev=$0;session=a[1];
 }
if($2~/receive/&&session==a[1])
 { 
     print session, prev,$0;prev=$0
 }
}
>

以下のように実行します。

> awk -f tmp.awk temp
session:111 abc message=sent session:111,x,y,z pqr message=receive session:111,4,5,7
session:123 abc message=sent session:123,x,y,z pqr message=receive session:123,4,5,7
abc message=sent session:342,x,y,z NO MATCH
session:589 abc message=sent session:589,x,y,z pqr message=receive session:589,4,5,7
> 
于 2013-02-14T12:46:05.257 に答える