ozabel
Goto Top

In UNIX-Script aus einer Log-Datei den Bereich ausgeben, der mit einem bestimmten Wert beginnt.

Hallo,

ich habe eine wahrscheinlich einfach zu lösende Aufgabe, zu deren Lösung ich Euch um Unterstützung bitte.

Schönen Dank im voraus
Oliver

Hallo,

ich habe folgendes Problem (zu lösen per UNIX-Skript):
Es gibt eine größere LOG-Datei, die eine Fehlermeldung enthält, die in eine neue Datei (besser: Variable) geschrieben werden soll.
Diese Fehlermeldung erkennt man an der Fehlernummer, die den Aufbau SQLnnnnN hat, z.B. SQL0911N. Sie kann sich auch über mehrere Zeilen erstrecken und geht bis zum Dateiende. Zu beachten: es können vorher auch andere Worte mit SQL vorkommen, die jedoch nicht o.a. Form entsprechen.

Hilfestellung gerne auch mit folgenden Erweiterungen:
- Datei enthält am Ende eine oder mehrere Leerzeilen, die nicht ausgegeben werden sollen
- Fehlermeldung geht nur bis zu einem bestimmten Wert (z.B. SQLxxxxE wie SQLxyzE)
- Fehlermeldung kann auch in der Mitte einer Zeile beginnen
- es kann mehrere Fehlermeldungen (gem. Schema "SQLnnnnN bis SQLxxxE") geben, die alle ausgegeben werden sollen


Danke
Oliver

Content-ID: 118803

Url: https://administrator.de/contentid/118803

Ausgedruckt am: 26.11.2024 um 01:11 Uhr

77559
77559 23.06.2009 um 10:29:54 Uhr
Goto Top
Hallo Oliver,

du solltest dich mal mit Regular Expresions beschäftigen. Die kannst du bei sed, awk, grep benutzen
Dies sollte deine Frage erfüllen
sed -n -e '/SQL[0-9]\{4\}N/,$p' test.log

Deine Erweiterungen kannst du mit Hilfe von
man sedinfo sed
oder diesem Tutorium selber austüfteln.

Gruß
LotPings
ozabel
ozabel 23.06.2009 um 17:34:39 Uhr
Goto Top
Danke für die schnelle Antwort.

Habe die Idee aufgegriffen und dann im Tutorium nach weiteren Informationen gesucht.

Für die Allgemeinheit - meine Lösung ist jetzt :

sed -n -e '/SQL3110N/,/^$/d' -e '/SQL[0-9]\{4\}N/,/^$/p' test.log

Damit schliesse ich die erste Meldung aus (da kein Fehler) und gebe alle anderen Meldungen nach dem Muster SQLnnnnN (bis zur nächsten Leerzeile) aus.

Gruß
Oliver