Zeilen von "X" bis "Y" aussortieren

atomrofler

Lt. Commander
Dabei seit
Mai 2005
Beiträge
1.337
Hi zusammen,

ich hab ein Logfile welches ich prt Shellscript auswerten möchte. Dazu muss ich Zeilen ab einer bestimmten Stelle bis zu einer bestimmten Stelle aussortieren. Log sieht im Prinzip so aus:

Code:
[B]initscriptstart[/B]
logevents
logevents
logevents
logevents
logevents
logevents
[B]initscriptstop[/B]
logevents
logevents
logevents
[B]initscriptstart[/B]
[I]logevents
logevents[/I]
[B]initscriptstop[/B]
Ich möchte jetzt, dass immer die letzten Zeilen im Abschnitt zwischen initscriptstart und stop aus dem Logfile gecuttet werden, um diese zu verwenden.
Anfangs dachte ich, ich leite die letzten Zeile einfach per Shellscript in eine extra Datei um, aber das geht doch bestimmt eleganter?

Jemand eine Idee?

Danke und Grüße
 
Zuletzt bearbeitet:

mensch183

Captain
Dabei seit
Jan. 2008
Beiträge
3.645
Ich möchte jetzt, dass immer die letzten Zeilen im Abschnitt zwischen initscriptstart und stop aus dem Logfile gecuttet werden, um diese zu verwenden.
"grep -B2 initscriptstop <logfile" liefert immer die 2 Zeilen vor dem match, den match selbst und "--" als Trenner bei mehreren Treffern. Match selbst und "--" daraus ggf. wieder entfernen:
grep -B2 initscriptstop <logfile | grep -v '^--$' | grep -v '^initscriptstop$'

Geht sicher besser, aber es tuts. :)
 
Zuletzt bearbeitet:

atomrofler

Lt. Commander
Ersteller dieses Themas
Dabei seit
Mai 2005
Beiträge
1.337
Hmm, leider nicht genau das was ich suche. Dein Besipiel beschreibt zwar im Beispiel die richtigen Zeilen, nur leider variiert das log. Es können auch mehrere Zeilen sein. Hätte ich vielleicht dazu schreiben sollen. :-)
Vielleicht noch eine Idee?
GRüße
 

atomrofler

Lt. Commander
Ersteller dieses Themas
Dabei seit
Mai 2005
Beiträge
1.337
Damit kann ich leider auch nur eine bestimmt Anzahl an Zeilen anzeigen lassen. Ich sehe grad auch keine Möglichkeit das ganze mit grep zu kombinieren.

Theoretisch müsste man zwischen initscriptstop die Zeilen hoch bis zum initscriptstart aufiltern.
Sonst bau ich mir einfach ein Script mit einer Endlosschleife, welches durchgehend läuft und bei bestimmten Aktionen die Zeilen in eine andere Datei umleitet. Wenn euch noch was einfällt, ich bin für alle Ansätze dankbar. :-)

Update: HABS! Wahrscheinlich unglaublich kompliziert, tuts aber. :)

So funktioniert es: Mit grep alle Zeilen durchnummerieren, und nach inits greppen (initscriptstart/stop). Dann halt die letzten beiden Zeilen tailen, was nur start und stop sein kann. Sieht dann so aus:

12:initscriptstart
15:initscriptstop

Mit awk die Zeilennummern rausziehen. Mit den ersten beiden Befehlen das ganze in zwei Vars schreiben. Mit diesen dann die letzten Zeilen errechnen. Bestimmt total kompliziert, aber immerhin eleganter als durchgehend ein Shellscript laufen zu lassen.
Danke euch!

Code:
#!/bin/bash
startline=`grep -n "inits" bla.log | tail -n 2 | awk -F":" '{ print $1 }' | head -n 1`
endline=`grep -n "inits" bla.log | tail -n 1 | awk -F":" '{ print $1 }'`

let lines=$endline-$startline+1

tail -n $lines bla.log | grep -v "inits"
 
Zuletzt bearbeitet:
Top