awk multiline Problem

D

dreamYu

Grünschnabel
Ich habe ein Problem mit der Extrahierung von speziellen Zeilen aus einem Logfile, komm aber einfach nicht auf eine passende Lösung. ?(

Es handelt sich um eine Oracle Alert Logfile, welche so aufgebaut ist:

----snip

Sun Feb 26 04:01:25 2006
ORA-12981 blablabla
Sun Feb 26 04:01:27 2006
ARC0: Archival started
ARC1: Archival started
Sun Feb 26 04:01:29 2006
Thread 1 opened at log sequence 111
Current log# 2 seq# 122
Current log# 2 seq# 123
Sun Feb 26 04:05:11 2006
ORA-12331 blabla blabla
Sun Feb 26 04:05:51 2006
ARC0: Archival started
ARC1: Archival started
LGWR: STARTING ARCH PROCESSES COMPLETE

----snap

Wie ist es möglich, nur die Fehlermeldung, welche mit "ORA-xxxxx", und den Timestamp, der sich eine Zeile darüber befindet, zu extrahieren?

Hier ein Beispiel:
Sun Feb 26 04:01:25 2006, ORA-12981
Sun Feb 26 04:05:11 2006, ORA-12331

Ich bin offen für jeden Tip. Danke im Voraus für die Hilfe!
 
ninguno schrieb:
so?
Code:
grep -A1 ORA- alert.log

Gute Idee, nur liefert er dabei die Ziele *unter* dem "ORA-"-String und nicht das Datum *darüber*.

Ich hab mir auch schon eine andere Variante überlegt, welche zu funktionieren scheint:

Code:
for num in $(grep -n "^ORA-" ora-alert.log | cut -d":" -f1);
do head -$num ora-alert.log | tail -2;
done

Ergebnis:
Sun Feb 26 04:01:25 2006
ORA-12981 blablabla
Sun Feb 26 04:05:11 2006
ORA-12331 blabla blabla
usw.

Gibt es dafür keine elegantere Lösung?
 
Zuletzt bearbeitet:
Hallo
Wenn du es mit (GNU) grep machen willst, dann ist -B1 die Zeile davor.

Gruß Wolfgang
 
eine awk lösung
Code:
awk '/^ORA-/ {printf "%s %s\n", prev, $0} {prev=$0}' alert.log
 
für dich unwartbar :)...mach's also in Perl, go go go! :)
 
Vielen Dank für eure Antworten - eine andere Sichtweise hilft mir sehr, da ich in diesen Bereichen noch relativ wenig Erfahrung hab :)
 
avaurus schrieb:
für dich unwartbar :)...mach's also in Perl, go go go! :)
Hallo
Perl wär ja zu einfach gelle ;)
Nene, ich versuchs es mal ganz unerwartet mit sed.
Vorsicht ungetestet!

lets go
Code:
sed -n -e '/ORA/b;$!N;/\n.*ORA/!D;s/\(.*\)\n\(.*\)$/\2 \1/g;p'  liste

Gruß Wolfgang
 

Ähnliche Themen

AWK Tip gesucht

Mysteriöser 11.4 Absturz - Maschine läuft, SSH und vor Ort Login unmöglich

Ubuntu X / dbus problem

Modulfehler?

Festplatte stirbt, dd funktioniert nicht

Zurück
Oben