Logfileauswertung mit awk

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
pixelpirat
Beiträge: 158
Registriert: 05.07.2007 17:22:21

Logfileauswertung mit awk

Beitrag von pixelpirat » 13.11.2020 15:14:07

Hallo,

seit ein paar Stunden bastel ich an einem awk Scipt, dass ein Logfile einfach auswerten soll.
Das Logfile beinhaltet die 4 verschiedenen Einträge (exemplarisch)

Code: Alles auswählen

2020-11-12 15:02:03 sshfs läuft (Prozess-ID: 15490) Mount ist aktiv
2020-11-12 15:03:11 sshfs läuft nicht mehr. Leite Maßnahmen ein:
2020-11-12 15:03:11 umount /var/www/html/CLEAN_single/static
2020-11-12 15:03:11 mount /var/www/html/CLEAN_single/static
2020-11-12 15:04:01 sshfs läuft (Prozess-ID: 13010) Mount ist aktiv
2020-11-12 18:07:01 sshfs läuft (Prozess-ID: 940) Mount ist aktiv
2
Als Ergebnis möchte den 1. Eintrag mit der neuen Prozess-ID und den Eintrag "sshfs läuft nicht mehr". Alle anderen sollen nicht ausgeben werden.

Der Befehl liefert mit zwar die gewünschten Informationen

Code: Alles auswählen

 awk  '{ print $2 " " $5  " " $6 }' sshfs-mount.log | uniq
jedoch nicht im komprimierter Form. uniq funktioniert nicht, was auch klar ist, weil die Uhrzeit sich immer unterscheidet.

Kann mir jemand den entscheidenen Tipp geben oder mein Script korrigieren/vervollständigen?

Vielen Dank um voraus.

Benutzeravatar
heisenberg
Beiträge: 3567
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Logfileauswertung mit awk

Beitrag von heisenberg » 13.11.2020 15:31:16

Deine Beschreibung ist unklar. Bitte gebe mal ein paar mehr logzeilen und dann eine exakte Ausgabe, so wie sie dein Programm erzeugen soll.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Logfileauswertung mit awk

Beitrag von eggy » 13.11.2020 15:32:46

Wenn die Logstruktur wirklich so ist, dann ist grep evtl der einfachere Weg:

Code: Alles auswählen

grep ssh blup  |grep nicht -A1 |head -n2

pixelpirat
Beiträge: 158
Registriert: 05.07.2007 17:22:21

Re: Logfileauswertung mit awk

Beitrag von pixelpirat » 13.11.2020 15:48:55

heisenberg hat geschrieben: ↑ zum Beitrag ↑
13.11.2020 15:31:16
Deine Beschreibung ist unklar. Bitte gebe mal ein paar mehr logzeilen und dann eine exakte Ausgabe, so wie sie dein Programm erzeugen soll.
Sorry, wenn es für Dich etwas verwirrend oder unvollständig erschien.

Das sind die Einträge die minütlich ins Logfile geschrieben werden.

Code: Alles auswählen

2020-11-12 15:42:01 sshfs läuft (Prozess-ID: 932) Mount ist aktiv
2020-11-12 15:43:01 sshfs läuft (Prozess-ID: 932) Mount ist aktiv
2020-11-12 15:44:01 sshfs läuft (Prozess-ID: 932) Mount ist aktiv
2020-11-12 15:45:01 sshfs läuft (Prozess-ID: 932) Mount ist aktiv
2020-11-12 15:46:01 sshfs läuft (Prozess-ID: 932) Mount ist aktiv
2020-11-13 14:18:01 sshfs läuft (Prozess-ID: 940) Mount ist aktiv
2020-11-13 14:19:01 sshfs läuft (Prozess-ID: 940) Mount ist aktiv
2020-11-13 14:20:01 sshfs läuft (Prozess-ID: 940) Mount ist aktiv
2020-11-13 14:21:01 sshfs läuft (Prozess-ID: 940) Mount ist aktiv
2020-11-13 14:22:01 sshfs gestorben (Prozess-ID: ). Leite Maßnahmen ein:
2020-11-13 14:22:01 umount /var/www/html/CLEAN_single/static
2020-11-13 14:22:01 mount /var/www/html/CLEAN_single/static
2020-11-13 14:23:02 sshfs läuft (Prozess-ID: 5862) Mount ist aktiv
2020-11-13 14:24:01 sshfs läuft (Prozess-ID: 5862) Mount ist aktiv
2020-11-13 14:25:01 sshfs läuft (Prozess-ID: 5862) Mount ist aktiv
2

Die gewünschte Ausgabe ist

Code: Alles auswählen

2020-11-12 10:22:01 sshfs mit neuer (Prozess-ID: 13010) gestartet
2020-11-12 15:36:01 sshfs mit neuer (Prozess-ID: 932) gestartet
2020-11-13 14:18:01 sshfs mit neuer (Prozess-ID: 940) gestartet
2020-11-13 14:23:02 sshfs mit neuer (Prozess-ID: 5862) gestartet
Danke für Deine Bemühungen!

VG

Benutzeravatar
heisenberg
Beiträge: 3567
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Logfileauswertung mit awk

Beitrag von heisenberg » 13.11.2020 15:56:22

Das wäre dann...

Code: Alles auswählen

grep "sshfs mit neuer.*Prozess-ID.*gestartet" sshfs-mount.log
Aber Deine Spezifikation widerspricht dem Ursprungspost. Deine Spezifikation sollte alle Fälle d. h. Zeilen enthalten, die Du bearbeiten möchtest. Außerdem enthält Dein Ergebnis Zeilen die nicht in der Beispiel-Logausgabe enthalten sind.

Wahrscheinlich willst Du eher das:

Code: Alles auswählen

grep -E "sshfs (mit neuer.*Prozess-ID.*gestartet|l.uft nicht mehr|gestorben)" sshfs-mount.log
Zuletzt geändert von heisenberg am 13.11.2020 16:05:18, insgesamt 1-mal geändert.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

pixelpirat
Beiträge: 158
Registriert: 05.07.2007 17:22:21

Re: Logfileauswertung mit awk

Beitrag von pixelpirat » 13.11.2020 16:04:37

heisenberg hat geschrieben: ↑ zum Beitrag ↑
13.11.2020 15:56:22
Das wäre dann...

Code: Alles auswählen

grep Prozess-ID sshfs-mount.log
Aber Deine Spezifikation widerspricht dem Ursprungspost. Deine Spezifikation sollte alle Fälle d. h. Zeilen enthalten, die Du bearbeiten möchtest.
Die Lösung gruppiert die Prozess-ID nicht.

Ich habe alle Zeilen gepostet auch schon im 1. Post. Die Zeilen mit mount und umount sind unwichtig und könnten auch wegbleiben. Die Ausgabe soll nur die 1. Zeile mit Zeitstempel und neuer ID ausgeben, wenn sich die Prozess-ID geändert hat.

Benutzeravatar
heisenberg
Beiträge: 3567
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Logfileauswertung mit awk

Beitrag von heisenberg » 13.11.2020 16:19:01

Ungefähr so:

Code: Alles auswählen

awk '
/sshfs l.uft.*Mount ist aktiv/ { 
   if(!pid[$6])  {
      print $1,$2,"sshfs läuft Prozess-ID:",$6, "Mount ist aktiv"
      pid[$6]=1
  }
}' sshfs.log
Ich habe alle Zeilen gepostet auch schon im 1. Post.
Ich möchte mir die Details nicht aus einzelnen Posts zusammensuchen. Deswegen habe ich Dich gebeten, es komplett in einem Post zu beschreiben.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

pixelpirat
Beiträge: 158
Registriert: 05.07.2007 17:22:21

Re: Logfileauswertung mit awk

Beitrag von pixelpirat » 13.11.2020 16:42:00

heisenberg hat geschrieben: ↑ zum Beitrag ↑
13.11.2020 16:19:01
Ungefähr so:

Code: Alles auswählen

awk '
/sshfs l.uft.*Mount ist aktiv/ { 
   if(!pid[$6])  {
      print $1,$2,"sshfs läuft Prozess-ID:",$6, "Mount ist aktiv"
      pid[$6]=1
  }
}' sshfs.log



D A N K E ! :THX: :THX: :THX: :THX: :THX: :hail: :hail:

Benutzeravatar
heisenberg
Beiträge: 3567
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Logfileauswertung mit awk

Beitrag von heisenberg » 14.11.2020 19:20:30

Hier ist ein gutes awk - Tutorial in deutsch:

https://riptutorial.com/de/awk
Jede Rohheit hat ihren Ursprung in einer Schwäche.

pixelpirat
Beiträge: 158
Registriert: 05.07.2007 17:22:21

Re: Logfileauswertung mit awk

Beitrag von pixelpirat » 14.11.2020 22:21:41

:THX: notiert und Bookmark gesetzt

Antworten