Logdatei in Teile aufteilen und nach Fehlern suchen

Logdatei in Teile aufteilen und nach Fehlern suchen

Ich möchte ein Logfile in Teile aufteilen und dann in diesen Teilen nach Fehlern suchen. Wenn ein Fehler auftritt, möchte ich den entsprechenden Teil des Logfiles in eine andere Datei packen.

Kleines Beispiel:

Die Logdatei sieht folgendermaßen aus:

STARTLOG1
blabla
more_blabla
ENDLOG1
STARTLOG2
FEHLER: Fehlertext
Dies ist ein Fehler
von Benutzer XYZ
ENDLOG2
STARTLOG3
blabla
more_blabla
ENDLOG3

Ich möchte die Protokolldatei in Abschnitte aufteilen. Alle Zeilen zwischen STARTLOG und ENDLOG sollten ein Abschnitt sein. Wenn in einem Abschnitt ein Fehler auftritt, extrahieren Sie den gesamten Abschnitt in eine Datei. Die Datei sollte folgendermaßen aussehen:

STARTLOG2
FEHLER: Fehlertext
Dies ist ein Fehler
von Benutzer XYZ
ENDLOG2

Antwort1

Versuche dies:

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

Um zu einer Datei mit dem Namen umzuleiten, logNwobei N die Nummer von ist STARTLOG, verwenden Sie:

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

Erläuterung

RSist das Datensatztrennzeichen, es definiert, wofür eine „Zeile“ steht awk. Hier stelle ich es auf ein, STARTLOGdamit der gesamte Datensatz als einzelne Zeile behandelt wird. Wenn diese „Zeile“ dann enthält ERROR, drucke ich STARTLOG(das RS, dies dient nur dazu, dasselbe Format wiederherzustellen).

Sie können den gleichen Ansatz auch mit Perl verwenden:

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

verwandte Informationen