awkを使用したパターンペアの検索と線の接続

awkを使用したパターンペアの検索と線の接続

一部のプロセスのログを含む大容量ファイルがあります。ログには「REQUEST(常に)/RESPONSE(時々)」などの行が含まれていますが、RESPONSEが必ずしもREQUESTの次の行ではないことに注意してください。 RESPONSE が表示される前に REQUEST ヘッダーが複数回表示されることがあります。存在する場合は、リクエストとレスポンスに参加し、その行を印刷したいと思います。これがこれまで試したことですが、出力にいくつかの行がありませんでした。

awk 'BEGIN {filename = "log1.etb"}
    {line_num++; print "FNR: " FNR " NR: " NR " Counter: " line_num;
    if ($0 ~ /REQUEST.*RPCLIB/)
                        {seqid = $0; sub(/^.*@SeqID/,"SeqID",seqid);
                        line_req = $0; line_resp = ""; ref_resp = 0;
                        ref_req = line_num; tot_req++;
                        print "REQUEST: " $0;
                        for(i=1;i<=line_num+99999;i++1) {getline < "log.etb"; if ($0 ~ /RESPONSE/ && $0 ~ seqid) {ref_resp = +i; line_resp = $0; break;}};
                        print "FNR: " FNR " NR: " NR " REQUEST: " ref_req " RESPONSE: " ref_resp " " seqid;
                        print line_req"+"line_resp > filename;
                        FNR = line_num-1; NR = FNR;
                        }
    }
    END {print "Total REQUEST: " tot_req}
    ' ../EXX/log.etb

入力する:

REQUEST  2019-01-16 00:32:07.809@{fields}@SeqID     = 9517
RESPONSE 2019-01-16 00:32:07.809@{fields}@SeqID     = 9517 , Partner SeqID = 3393
REQUEST  2019-01-16 00:32:07.809@{fields}@SeqID     = 9515
REQUEST  2019-01-16 00:32:07.810@{fields}@SeqID     = 9520
RESPONSE 2019-01-16 00:32:07.810@{fields}@SeqID     = 9520 , Partner SeqID = 3395

希望の出力:

REQUEST  2019-01-16 00:32:07.809@{fields}@SeqID     = 9517+W02/RESPONSE 2019-01-16 00:32:07.809@{fields}@SeqID     = 9517 , Partner SeqID = 3393
REQUEST  2019-01-16 00:32:07.809@{fields}@SeqID     = 9515+
REQUEST  2019-01-16 00:32:07.810@{fields}@SeqID     = 9520+W02/RESPONSE 2019-01-16 00:32:07.810@{fields}@SeqID     = 9520 , Partner SeqID = 3395

要求/応答に関連付けられているSeqID番号ですが、ある時点でログに再び表示されることがあります。また、REQUEST は、RESPONSE の前に何度も発生する可能性があり、RESPONSE が発生する場合と発生しない場合があります。

ベストアンサー1

コメントできないため、回答としてコメントを残します。申し訳ありません。
SEQIDが一致したら、REQUESTとRESPONSEに参加したいですか?まず、seqidに基づいてデータをソートするとどうでしょうか?応答が常に要求に従うことを保証します。

おすすめ記事