Hallo!
Leider kenne ich mich noch nicht so gut aus mit der bash, aber ich arbeite dran und da mein Problem etwas schwer zu beschreiben ist, habe ich auch nicht selbst die Lösung gefunden und das führt mich hierher:
Ich will Fehlermeldungen in einer log-Datei zählen, die etwa so aussieht (vereinfacht):
OK
Name1
OK
Name1
Fehler
Name1
OK
Name1
OK
Name2
OK
Name1
Fehler
Name1
Fehler
Name1
Fehler
Name2
Fehler
Name2
.
.
.
Nun will ich die Anzahl der Fehler im Zusammenhang mit Name1 und die mit Name2 ermitteln, suche also die Zeilen mit „Fehler“ und schaue dann, ob in der nächsten Zeile „1“ oder „2“ steht.
Mein Code ist folgender:
öffne Zeile_i -> suche „Fehler“ -> in nächster Zeile „Name1“ oder „Name2“? -> zählen -> nächste Zeile
#!/bin/bash
i=1 #mit Zeile 1 beginnen
suchwort=Fehler
first=0
second=0
firstname=Name1
secondname=Name2
while [sed -n '$ip' foo.log
] #solange Zeile existiert
do
if [sed -n '$ip' foo.log | grep $suchwort
]; then #wenn Fehler
i=expr $i + 1
#in nächste Zeile gehen
if [grep $firstname sed -n '$ip' foo.log
]; then
first=expr $first + 1
fi
if [grep $secondname sed -n '$ip' foo.log
]; then
second=expr $second + 1
fi
fi
i=expr $i + 1
#eine Zeile weiter gehen
done
echo 1 : $first
echo 2 : $second
Mir ist klar, dass das verkorkst ist, aber besser schaffe ich es gerade nicht, vielleicht kann das der Profi auch in zwei Zeilen lösen?
Danke für die Hilfe schonmal
destructor