ich eine große Menge an langen unregelmäßigen Protokolle verfügen, die wie folgt aussehen:eine awk oder sed Druck mit einem Schlüsselwort, bis ein Ende Muster fort erreicht ist
###<date> errortext <errorcode-xxxxx>
errortext
errortext
errortext
errortext
###<date> errortext <errorcode-yyyy>
errortext
errortext
###<date> errortext <errorcode-<zzzzzzz>
errortext
errortext
errortext
errortext
errortext
errortext
errortext
etc
Die Länge ist unregelmäßig, und Fehler mit denselben Fehlercodes müssen mit grep/awk/sed oder ähnlichen Methoden gefunden werden.
Ich muss diese Dokumente nach Fehlercode aufteilen, alle Fehler eines Codes in ein Dokument drucken.
Wenn ich versuche, ein ganzes Fehlercodesegment mit einer Linie zu finden wie:
sed -n '/#</{:start /###/!{N;b start};/<errorcode-024332>/p}' file
Das Problem mit Linien wie die oben ist, dass es nur die Zeile drucken, die die „Error-Code-024332“ enthält und nicht der ganze Fehlercode bis zum nächsten Segmentstart (in diesem Fall mit dem Trennzeichen "###").
Wie erreiche ich das?
https://stackoverflow.com/questions/38972736/how-to-select-lines-between-two-patterns könnte helfen, z. B .: awk '/ Fehlercode-024332/{f = 1; drucken; next}/^ ###/{f = 0} f 'file' wird dir 'errorcode-024332' Abschnitt – Sundeep