ログファイルから特定のセクションを抽出する方法を見つけようとしています。各部分は固定文字列「<--------------->」で区切られます。
<-------------->
abc: def1
ghi: jkl1
xyz generated: def1
<-------------->
abc: def2
ghi: jkl2
xyz generated: def2
Dec 04, 2021 2:51:05 AM abcdefg
SEVERE: [Line 447.149] Lorem ipsum dolor sit amet at [Line 212.2]
Dec 04, 2021 2:51:05 AM abcdefg
SEVERE: [Line 1315.78] Lorem ipsum dolor sit amet at [Line 147.138]
xyz generated: def2
<-------------->
abc: def3
ghi: jkl3
xyz generated: def3
<-------------->
sed / grepを使用してSEVEREまたはWARNING単語を含む部分を抽出できますか?
別の方法は、行数を計算することです。 3行しか削除できません。より多くの行がある他のすべてのセクションは、私が抽出したいセクションです。
ベストアンサー1
各ブロックをGNU AWKのレコードと考えることができます。
awk -v RS='<-------------->\n' -v ORS='' '/SEVERE|WARNING/'
これは、区切り文字とそれに続く改行文字をレコード区切り文字として扱います。 「SEVERE」または「WARNING」に一致するすべてのレコードは、新しい行を区別せずに出力されます。一致するレコードを分割するには、ORS
設定をデフォルトのままにできます。
awk -v RS='<-------------->\n' '/SEVERE|WARNING/'
これにより、最後のエントリを含む一致する各レコードの後に新しい行が追加されます。