
Ich habe eine Datei, die Folgendes enthält:
1415602803,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22
1415602807,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22
1415602811,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22
1415602815,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22
Ich möchte den Zeitstempel in ein Datum in diesem Format umwandeln:
2014-11-10 02:00:03,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22
2014-11-10 02:00:07,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22
2014-11-10 02:00:11,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22
2014-11-10 02:00:15,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22
Wie kann ich das machen?
Ich weiß, dass das funktioniert: perl -pe 's/(\d+)/localtime($1)/e'
(vondiese Frage), aber das Ausgabeformat ist Mon Nov 10 02:00:03 2014
.
Ich weiß, dass dieser Befehl Zeitstempel in die gewünschte Ausgabe umwandeln kann: , aber ich habe es mit using wegen der vielen Anführungszeichen und so weiter date -d@1415602803 +"%F %H:%M:%S"
nicht zum Laufen gebracht .awk
system("cmd")
Antwort1
Habe hier was gefunden:Stackoverflow - Konvertieren von Unixtime über die Befehlszeile.
Mir ist Folgendes eingefallen:
awk -F"," '{OFS=","; $1=strftime("%Y-%m-%d %H:%M:%S", $1); print $0}' file
-F","
um ein Feldtrennzeichen von zu verwenden,
,OFS=",";
so dass die Ausgabefelder ebenfalls durch ein , getrennt sind,
.$1=strftime("%Y-%m-%d %H:%M:%S", $1);
den Wert des ersten Feldes$1
in das angegebene Format zu ändern, undprint $0;
um die ganze Zeile zu drucken.
Antwort2
So vielleicht
perl -pe 'use POSIX qw(strftime); s/^(\d+)/strftime "%F %H:%M:%S", localtime($1)/e'
Antwort3
Wenn Sie möchten, können Sie externe Befehle mit beliebigen Datumsformaten awk
verwendendate
awk -F, -v OFS="," '{("date +%F\ %T -d @"$1)|getline $1}1'
Antwort4
Ich habe vor 9 Monaten eine Frage gestellt, die als Duplikat dieser Frage markiert wurde. Erst jetzt habe ich eine Aufforderung gesehen, die Antwort zu posten, die für mich zu dieser Frage funktioniert hat. Hier ist ein Link zu dieser Frage und Antwort.