Unix-Befehl zum Begrenzen eines Zeitbereichs

19117
gaurav

Ich habe eine Protokolldatei, die mit einem bestimmten Datum gespeichert wurde. Ich möchte Protokolleinträge während einer bestimmten Zeit und eines bestimmten Datumsbereichs in eine andere Datei abrufen.

Bsp: alle Einträge von 2014-12-04 00:00:00 bis 2014-12-04 17:00:00

1

3 Antworten auf die Frage

2
Daniel Goldfarb

Versuchen Sie es mit egrep:

pttrn="2014-12-04 0[0-9]" pttrn="$|2014-12-04 1[0-6]" pttrn="$|2014-12-04 17:00:00"  egrep "$" <logfile> 

Das Egrep-Muster enthält drei Teile. Der erste Teil umfasst alles von 00:00:00 bis 09:59:59. Der zweite Teil bezieht sich von 10:00 bis 16:59:59 auf alles und der dritte Teil auf 17:00:00.

Ihr erster "egrep" entfernt Werte, die mit "08" oder "09" beginnen (dh zwischen "08: 00" und "09: 59"), und der zweite erlaubt "17: 10", "17: 20" , `17: 30` usw., um durchzukommen. G-Man vor 9 Jahren 0
@ G-Man Danke. Du hast recht. Ich glaube, ich habe es jetzt behoben. Daniel Goldfarb vor 9 Jahren 0
Das sieht so aus, als sollte es funktionieren. Es könnte vereinfacht werden zu "egrep" 2014-12-04 (0 [0-9] | 1 [0-6] | 17: 00: 00) "`. G-Man vor 9 Jahren 0
0
vembutech

Wenn Sie ein Protokoll von 4 Minuten benötigen,

grep "01/APR/2014:16:3[5-9]" logfile 

gibt am 1. April 2014 zwischen 16:35 und 16:39 alle Protokolle zurück.

Angenommen, Sie benötigen die letzten 5 Tage ab dem 17. September 2014, können Sie Folgendes verwenden:

grep "1[3-7]/Sep/2011" logfile 

Hofft, das hilft

0
wurtel

Sie können eine Start- und eine Endzeile auswählen, z. B. mit sed:

sed -n '/Dec 5 11:00/,/Dec 5 12:00/p' /var/log/daemon.log 

Dadurch werden alle Zeilen von der ersten Zeile Dec 5 11:00bis (einschließlich) der ersten Zeile mit gedruckt Dec 5 12:00. Dies setzt voraus, dass das Protokoll zeitlich sequentiell ist (dh alle Zeilen sind in der Reihenfolge der Zeit). Mit dieser -nOption können Sie die Standardaktion für das Drucken jeder Zeile unterdrücken.

Dies setzt jedoch voraus, dass Einträge für "Dec 5 11: 00" und "Dec 5 12: 00" vorhanden sind, nicht wahr? Wenn auf "5. Dezember 10: 59" unmittelbar "5. Dezember 11: 01" folgt, kann "sed" nicht wissen, wo er anfangen soll. Und wenn es einen 5. Dezember um 11: 00 Uhr gibt, dann aber auf den 5. Dezember 11: 59 folgt, dann wird 'Sed' nicht wissen, wo er aufhören soll. G-Man vor 9 Jahren 0
Wahr; Sie könnten den `: 00`-Teil weglassen, aber dann müsste mindestens eine Log-Zeile pro Stunde vorhanden sein. Ich persönlich würde das Skript an die Daten anpassen. vielleicht sogar etwas perl foo anwenden. wurtel vor 9 Jahren 1