2017-02-05 7 views
0

ich eine Log-Datei, die Protokolle enthalten wie folgtErhalten letzten 30 Minuten von Protokolldatei

1486307866.155 240207 68.146.231.80 TCP_MISS/200 790 CONNECT clients1.google.com:443 - DIRECT/172.217.6.238 - 

1486307866.155 die Zeit im Unix-Format mit entspricht 2017-02-05 07:17:46 ist (Format: Ymd H: i: s)

Ich brauche einen Unix-Befehl, der mir die Protokolle innerhalb der letzten 30 Minuten im folgenden Format gibt und alle Details verwerfe, die ich nicht brauche.

2017-02-05 07:17:46|68.146.231.80|clients1.google.com:443

+0

der Zeitstempel wird Unix Selbst tun, wie ich 'date verwenden kann ('Ymd H: i: s', '1486307866,155');' in php zeitzustempeln – user2650277

Antwort

3

Mit GNU Datum und GNU awk können Sie erreichen, was Sie wollen:

awk -v bt=$(date "+%s" -d "30 minutes ago") '$1 > bt {printf("%s|%s|%s\n", strftime("%F %T",$1), $3, $7)} ' yourfile 

Erläuterung:

  • der Befehl date date "+%s" -d "30 minutes ago" erhält den Zeitstempel von vor 30 Minuten
  • Der Befehl date ist repla ced mit seinem Ausgang über die Befehlssubstitutions Funktion gibt $(...)
  • die awk Option -v dass Zeitstempel als variable bt in das awk Skript
  • die Skript druckt nur die Zeilen aus der Datei einen Wert in der ersten Spalte ($1) größer benannt mit als bt in dem gewünschten Format
+0

Danke für die Hilfe zu konvertieren ... könnten Sie den Befehl awk aktualisieren, um eine Domain zu filtern, zB '* clients1.google.com *'. Normalerweise würde ich 'grep -E 'dafür tun, aber ich denke, awk wird hier am besten funktionieren. – user2650277

+0

@ user2650277: Warum versuchst du es nicht selbst und postest dann ein neues Q, wenn du es nicht lösen kannst? Unter [awk tutorial] (http://grymoire.com/Unix/awk.html) finden Sie einige grundlegende Ideen. Viel Glück – shellter

+1

@ user2650277 ändern Sie den Zustand vor dem printf zu '($ 1> bt) && $ 7 ~/clients1.google.com /' –

Verwandte Themen