Aus Logdateien Filtern

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Rattlesnake
Beiträge: 17
Registriert: 20.06.2007 09:24:12

Aus Logdateien Filtern

Beitrag von Rattlesnake » 16.12.2009 14:37:30

Hi @all,

hab mal wieder eine Shell-Skript frage ;)

Und zwar hab ich in logdateien die selbständig rotieren folgende Einträge:

Code: Alles auswählen

12/15/2009 9:47:36.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:14:56 PM for $[19]centaur.micronas.com$[20]
12/15/2009 9:47:39.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:40:24 PM for $[19]mops.micronas.com$[20]
12/15/2009 9:47:42.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:15:00 PM for $[19]tangens.micronas.com$[20]
12/16/2009 14:33:07.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:14:56 PM for $[19]centaur.micronas.com$[20]
12/16/2009 14:33:42.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:40:24 PM for $[19]mops.micronas.com$[20]
12/16/2009 14:34:20.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:15:00 PM for $[19]tangens.micronas.com$[20]
Wie zu sehen ist die erste "Spalte das Datum des jeweiligen Eintrages (12/16/2009) und dahinter die Uhrzeit. Diese Einträge werden automatisch eingetragen. Dort kann ich nichts verändern.

Jetzt soll ich aus den Logfiles diese zeilen herausfiltern, die weniger als 24h her sind.

Gehen wir davon aus das heute der 16.12.2009 ist und jetzt 15:33 Uhr sollen nur noch die Einträge vom 12/16/2009 ausgeben / gespeichert werden.

Code: Alles auswählen

12/16/2009 14:33:07.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:14:56 PM for $[19]centaur.micronas.com$[20]
12/16/2009 14:33:42.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:40:24 PM for $[19]mops.micronas.com$[20]
12/16/2009 14:34:20.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:15:00 PM for $[19]tangens.micronas.com$[20]
Hat mir da jemand eine Lösung bzw. Lösungsansatz?
Ich vermut mal schwer das es mit sed und awk funktioniert. Leider kenne ich mich mit diesen "Skript-Sprachen" nicht aus.

Vielen Dank schonmal für´s Lesen :D

Mfg
Rattlesnake

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Aus Logdateien Filtern

Beitrag von chrisbra » 17.12.2009 21:23:39

Rattlesnake hat geschrieben:

Code: Alles auswählen

12/15/2009 9:47:36.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:14:56 PM for $[19]centaur.micronas.com$[20]
12/15/2009 9:47:39.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:40:24 PM for $[19]mops.micronas.com$[20]
12/15/2009 9:47:42.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:15:00 PM for $[19]tangens.micronas.com$[20]
12/16/2009 14:33:07.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:14:56 PM for $[19]centaur.micronas.com$[20]
12/16/2009 14:33:42.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:40:24 PM for $[19]mops.micronas.com$[20]
12/16/2009 14:34:20.000: 0x0d12c0f0: $[*20750]Integrity check failed for the restore point created on 12/11/2009 10:15:00 PM for $[19]tangens.micronas.com$[20]
Wie zu sehen ist die erste "Spalte das Datum des jeweiligen Eintrages (12/16/2009) und dahinter die Uhrzeit. Diese Einträge werden automatisch eingetragen. Dort kann ich nichts verändern.

Jetzt soll ich aus den Logfiles diese zeilen herausfiltern, die weniger als 24h her sind.
Hier mal ein Codeschnippsel, wie es mit Gnu AWK gehen sollte:

Code: Alles auswählen

#!/usr/bin/awk -f
{
    a=gensub(/([0-9]+)\/([0-9]+)\/([0-9]+)/,"\\3 \\1 \\2","g", $1);
    b=gensub(/^([0-9]+):([0-9]+):([0-9]+).*/, "\\1 \\2 \\3", "g", $2);
    today=systime();
    logd=mktime(a " " b);
    if ((today-logd)<60*60*24) print;
}
Aufruf dann

Code: Alles auswählen

todaylog.awk logfile
Meine Whishlist
:wq!

Antworten