Wie kann ich Zeitstempel in einer Spalte in ein Datum umwandeln?

Wie kann ich Zeitstempel in einer Spalte in ein Datum umwandeln?

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 .awksystem("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 $1in das angegebene Format zu ändern, und
  • print $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 awkverwendendate

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.

https://unix.stackexchange.com/a/304009/172916

verwandte Informationen