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"

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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.