2016-03-21 17 views
0

Ich möchte Daten mit Intervallen von 1 Stunde in meiner Protokolldatei extrahieren. Hier ist meine Variablen:Wie bekomme ich die Stunden mit awk?

date_file = date +"%Y-%m-%d %H" date_minus_one = date -d "-1 hour" +"%Y-%m-%d %H" date_minus_two = date -d "-2 hour" +"%Y-%m-%d %H"

Hier ist meine Syntax in awk aber immer alle Daten drucken.

awk '$date_file >= $date_minus_one && $date_file <= $date_minus_two' <filename> 

Ich habe auch grep in ein Intervall von 1 Stunde erhalten, aber es hat nicht funktioniert.

Hier ist ein Beispieldaten I pro Stunde Daten extrahieren möchten:

2016-03-30|00:54:46,060|[WARNING] 
2016-03-30|00:55:46,318|[OK] 
2016-03-30|00:55:46,318|[OK] 
2016-03-30|02:42:13,691|[UNKNOWN] 
2016-03-30|07:53:16,356|[CRITICAL] 
2016-03-30|08:56:41,410|[WARNING] 

Antwort

0

Die Ausgabe von Datum ein String ist und einen Raum in ihm - D. h

$ date -d "-2 hour" +"%Y-%m-%d %H" 
2016-03-20 18 

So muss es zitiert werden zu können, um es gegen etwas in der Datei zu vergleichen.

awk '"$date_file" >= "$date_minus_one" && "$date_file" <= "$date_minus_two"' 

, dass einige der Probleme lösen würde, ABER nach Ihrer Beschreibung $ date_file, $ date_minus_one etc Konstanten sind, so nichts während der Ausführung ändern wird, und der Ausdruck wird entweder immer wahr sein oder immer falsch sein.

+0

Was kann ich tun, um es immer wahr zu machen, damit ich pro Stunde Daten mit meiner Datei bekommen kann? –

+0

@RobertJohnMartin Crontab? – Kent

+0

@RobertJohnMartin - wir wissen nicht, wie Ihre Dateien aussehen, so dass es unmöglich zu beantworten ist - aktualisieren Sie Ihre Frage, indem Sie Beispiele für die Dateinamen und Beispiele für den Dateiinhalt hinzufügen – Soren

Verwandte Themen