Ich habe eine CSV-Datei (mit dem Namen a.csv
) aus DB Mongo wie folgt exportiert:
...
ABC,DN,1000,RENEW_DAY,Thu Apr 27 2017 23:19:47 GMT+0700 (ICT),1,1,4,-1
ANSLAS,DN,1000,RENEW_DAY,Thu Apr 27 2017 23:19:52 GMT+0700 (ICT),1,1,4,-1
...
Ich möchte diese Datei in MySQL importieren, aber dieses Datumsformat kann nicht eingefügt werden. Ich habe also eine Idee, dies b.csv
vor dem Einfügen in MySQL zu konvertieren
...
ABC,DN,1000,RENEW_DAY,2017-04-27 23:19:47,1,1,4,-1
ANSLAS,DN,1000,RENEW_DAY,2017-04-27 23:19:52,1,1,4,-1
...
Dies ist der Bash-Befehl, den ich zum Konvertieren von Daten in Bash verwende.date -d"Thu Apr 27 2017 23:19:52 GMT+0700 (ICT)" +'%Y-%m-%d %H:%M:%S'
Wie kann ich dies also mit der Bash-Shell wie folgt automatisch konvertieren ./process.sh a.csv b.csv
?
process.sh
#!/bin/bash
# Environment
filename=$1
filelines=`cat $filename`
for phone in $filelines ;
do
<HOW CAN CUT Filed Date and convert this and export to b.csv file>
done
Antwort1
Mit dem Befehl können Sie read
die Felder trennen. Dazu müssen Sie die Feldtrennervariable auf setzen, um ,
anzugeben, dass die Felder durch Kommas getrennt sind. Sie können dies später wieder ändern, wenn Sie im Skript andere Dinge tun müssen:
#!/bin/bash
oldIFS=$IFS
IFS=,
while read a b c d e f g h i; do
echo "$a,$b,$c,$d,$(date -d"$e" +'%Y-%m-%d %H:%M:%S'),$f,$g,$h,$i"
done < "$1"
IFS=$oldIFS
(Dies setzt GNU Date voraus, -d
in FreeBSD macht Date beispielsweise etwas anderes.)