
unten ist das Format in einer Datei. Kann jemand helfen, die ersten beiden Spalten im Datumsformat in das Epochenformat zu konvertieren?
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702058496,0,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702058496,2,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702058496,3,332,0,0,0,332,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702058496,4,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702062592,0,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702062592,2,0,0,0,0,919,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702062592,3,919,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702062592,4,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702066688,0,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702066688,2,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702066688,3,0,0,0,0,919,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702066688,4,0,0,0,0,0,0,0
2018-01-02 10:44:00,2018-01-02 10:59:00,1,702058496,0,0,0,0,0,0,0,0
2018-01-02 10:44:00,2018-01-02 10:59:00,1,702058496,2,0,0,0,0,0,0,0
ich habe es mit folgendem Befehl versucht.
aa= cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}'
; für i in cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}'
; mache Datum -d "$aa" "+%s"; fertig
aber es wird folgender Fehler ausgegeben: Datum: ungültiges Datum 2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00' date: invalid date
2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00' Datum: ungültiges Datum `2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00'
Antwort1
Dies würde funktionieren, vorausgesetzt, die Daten liegen in:
IFS=,;while read line; do
ff=($line);
ff[0]=`date -d "${ff[0]}" +%s`;
ff[1]=`date -d "${ff[1]}" +%s`;
echo "${ff[*]}";
done < file.in > file.out
Hinweis: Je nach Ursprungsformat müssen Sie dem Datumsbefehl möglicherweise „UTC“ hinzufügen.
Um dies nun direkt zu tun, wie in Ihrem Kommentar gefordert, müssen Sie eine Schleife über alle Dateien ausführen. Verwenden Sie beispielsweise den Befehl „find“, um alle CSV-Dateien rekursiv in /mypath/to-files/ abzugleichen:
for file in $(find /mypath/to-files -name "*.csv"); do
cp $file /tmp/tmp.csv
IFS=,;while read line; do
ff=($line);
ff[0]=`date -d "${ff[0]}" +%s`;
ff[1]=`date -d "${ff[1]}" +%s`;
echo "${ff[*]}";
done < /tmp/tmp.csv > $file
done