Datum in der Bash-Shell konvertieren

Datum in der Bash-Shell konvertieren

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.csvvor 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 readdie 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, -din FreeBSD macht Date beispielsweise etwas anderes.)

verwandte Informationen