ログファイルを分割してエラーを検索する

ログファイルを分割してエラーを検索する

ログファイルを分割し、その分割部分でエラーを検索します。エラーがある場合は、関連するログファイル部分を別のファイルに格納します。

ちょっとした例:

ログファイルは次のようになります:

STARTLOG1
blabla
more_blabla
ENDLOG1
STARTLOG2
エラー: Errortextこれは ユーザー XYZ からの
エラーです ENDLOG2 STARTLOG3 blabla more_blabla ENDLOG3





ログファイルを分割します。STARTLOG と ENDLOG の間のすべての行を 1 つのピースにします。ピースにエラーが発生した場合は、ピース全体をファイルに抽出します。ファイルは次のようになります。

STARTLOG2
エラー: エラーテキストこれは ユーザー XYZ からの
エラーです ENDLOG2

答え1

これを試して:

$ awk -v RS="STARTLOG" '/ERROR/{print RS$0; }' log
STARTLOG2
ERROR: Errortext
This is an Error
from user XYZ
ENDLOG2

logNN が からの番号であるというファイルにリダイレクトするにはSTARTLOG、次を使用します。

gawk -v RS="STARTLOG" '/ERROR/{print RS$0 > "log"$1; }' log

説明

RSはレコード区切りで、 の「行」が何であるかを定義します。ここでは、レコード全体が 1 行として扱われるようにawkに設定しています。次に、その「行」に が含まれている場合は、 を出力します( 、これは同じ形式を再現するためだけです)。STARTLOGERRORSTARTLOGRS

Perl でも同じアプローチを使用できます。

perl -lne 'BEGIN{$/="STARTLOG"}{print "$/$_" if /ERROR/}' log 

関連情報