grep / sedを使用して最初のパターンを抽出し、最初のパターンの前に発生し、最初のパターンに関連する2番目のパターンを抽出します。

grep / sedを使用して最初のパターンを抽出し、最初のパターンの前に発生し、最初のパターンに関連する2番目のパターンを抽出します。

パターンが発生した場合(以下の例では「イベント100」)、ファイルから特定の行を抽出しようとします.htm。同時に、最初のパターンに関連していますが、次から来る他のパターンも検索する必要があります。上記の行の1つです。第2のパターンは、第1のパターンが発生する時間を示す。

例:

<AZ>207994</AZ>
<AZ>09:10:41.9</AZ>
<AZ>02/04</AZ>
<AZ>[990875]</AZ>
<TR VALIGN=TOP>
<AZ>207995</AZ>
<AZ>09:10:56.4</AZ>
<AZ>02/04</AZ>
<AZ>[990876]</AZ>
<AZ>30718</AZ><AZ><!--void--></AZ><AZ><!--void--></AZ><AZ><!--void--></AZ>
<AZ>TN (speed)  Event 3 occurred</TD></TR>
<TR VALIGN=TOP>
<AZ>30719</TD><TD><!--void--></AZ><AZ><!--void--></AZ><AZ><!--void--></AZ>
<AZ>TN (speed)  Event 100 occurred</TD></TR>
<TR VALIGN=TOP>
<AZ>30720</AZ><AZ><!--void--></AZ><AZ><!--void--></AZ><AZ><!--void--></AZ>

私は次の結果が欲しい:

02/04 09:10:56.4 [990876] イベント100発生

ベストアンサー1

私は次のような迷惑な一行を思い出しました。 (読みやすくするために1行に改行しました。)

awk -F'[<>]'  '($0 ~ /[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/) {time=$3}
               ($0 ~ /[0-9][0-9]\/[0-9][0-9]/) {date=$3}
               ($0 ~ /\[[0-9]+\]/) {tag=$3}
               ($0 ~ /Event 100 occurred/) { print date, time, tag, "Event 100 occurred"}' < testfile

これにより、時刻、日付、ラベル([12345])などが一貫して収集され、「イベント 100 発生」などの行が表示されると、変数の現在の内容が印刷されます。これが欲しい出力ですか?

おすすめ記事