Protokolldatei zwischen zwei Daten lesen

7

Ich muss die Protokolldatei zwischen lesen und meine Frage ist, wie ich mit Unix-Befehlen nur den Text in der Datei abrufen kann, der zwischen zwei Daten liegt. Jede Zeile enthält ein Datum, und ich möchte den Text in der Datei erhalten, dessen Datum gleich oder größer als das FROM-Datum und niedriger oder gleich dem TO-Datum ist.
Das Format des Datums ist 13/05/23 01:58.
Das zweite Datum ist für ein Beispiel 13/05/13 07:50. Beispiel

13:41:55,110  INFO HellowordlsThis text is generated by me
Jordan Borisov
quelle
Ist das Datum am Anfang der Zeile? Wie ist die Zeile formatiert?
Chris Down
Das Datum steht am Anfang der Zeile. Irgendwo gibt es nur nicht volles Datum (hh: mm: ss). Ich habe den Fragentext aktualisiert. Bitte sehen Sie das Beispiel.
Jordan Borisov
Alles, was Sie wollen, ist bereits in diesem Beitrag: stackoverflow.com/questions/7706095/…
slm

Antworten:

14

Da die Daten in einem Format vorliegen, in dem die chronologische Reihenfolge mit der lexikalischen Reihenfolge übereinstimmt, können Sie Folgendes tun:

awk '$0 >= "13/05/13 07:50" && $0 <= "13/05/23 01:58"'

(vorausgesetzt, die Zeitstempel befinden sich am Anfang jeder Zeile)

Stéphane Chazelas
quelle
2
Sie können auch die Bereichsmuster von awk verwenden: gnu.org/software/gawk/manual/html_node/Ranges.html ZB awk '/^May 24 04/,/^May 24 05/'(für Nachrichten im Syslog-Format). Dies hat eine etwas andere Semantik als Stephanes Antwort, kann aber kompakter sein.
CLF
2
@CLF und erfordert, dass die Zeilen in chronologischer Reihenfolge vorliegen und dass an beiden Daten Protokollzeilen vorhanden sind.
Stéphane Chazelas