Wie leite ich die Ausgabe an das Datum -d "Wert" weiter?

12

Ich habe ein Datum wie "2014-01-30 05:04:27 GMT" und wenn ich das Datum -d "2014-01-30 05:04:27 GMT" ausführe, befindet sich die Ausgabe in der Zeitzone meines Servers ("Do. 30. Januar 16:04:27 EST 2014 ").

Mit grep und cut habe ich das Datum in GMT aus einer Datei extrahiert. Ich habe jedoch Schwierigkeiten, dies dann in meine Ortszeit umzuwandeln.

Beispielsweise:

[user @ server log] # grep "etwas" logfile.txt | grep "Erfolgreich" | cut -f1 -d '['

Ausgabe: 2014-01-30 05:04:27 GMT

Was kann ich am Ende hinzufügen, um diese Ausgabe an "Datum -d" zu übergeben?

Versucht:

  • [user @ server log] # grep "etwas" logfile.txt | grep "Erfolgreich" | cut -f1 -d '[' | Datum -d
  • [user @ server log] # grep "etwas" logfile.txt | grep "Erfolgreich" | cut -f1 -d '[' | Datum
  • [user @ server log] # grep "etwas" logfile.txt | grep "Erfolgreich" | cut -f1 -d '[' | Datum -d "$ 1"
Shane
quelle

Antworten:

12
gmt="$(grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[')"
date -d "$gmt"

Oder wenn Sie das Pipeline-Format bevorzugen:

grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | { read gmt ; date -d "$gmt" ; }

Das Problem ist, dass datestdin nicht verwendet wird. Daher müssen wir das stdin in einer Variablen ( gmthier aufgerufen ) erfassen und diese dann in der Befehlszeile an übergeben date.

Beispielausgabe des zweiten Ansatzes:

$ echo  "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014
John1024
quelle
1
Danke, das hat das Problem gelöst! Ich danke Ihnen auch, dass Sie den Grund dafür erklärt haben, warum es nicht funktioniert hat.
Shane
18

Wenn Sie das GNU-Datum eines ausreichend aktuellen Coreutils verwenden, finden Sie auf date -fdem Hilfebildschirm Folgendes:

-f, --file=DATEFILE       like --date once for each line of DATEFILE

Ihr Versuch 4 könnte also gewesen sein:

$ grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -f -

der letzte -steht für stdin.

hroptatyr
quelle
2
Dies sollte die akzeptierte Antwort sein.
Petrus K.
Ist es möglich, die Ausgabe des obigen Befehls mit einem bestimmten Datum zu vergleichen? Z.B. Ich muss alle Daten auflisten, die älter sind als "Mi 30 Jan 21:04:27 PST 2014"
Manu
@ Manu nicht per se, Dateutils haben dategrepfür diesen speziellen Anwendungsfall.
Hroptatyr
Das ist so viel einfacher! Wenn ich nur lesen könnte, hätte ich das vielleicht in der Manpage gefunden.
Ken Sharp