Tengo un archivo csv (llamado a.csv
) exportado desde DB mongo como este:
...
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
...
Quiero importar este archivo a MySQL pero no se puede insertar este formato de fecha. Entonces tengo una idea para convertir esto b.csv
antes de insertarlo en MySQL.
...
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
...
Este es el comando bash que uso para convertir la fecha en bashdate -d"Thu Apr 27 2017 23:19:52 GMT+0700 (ICT)" +'%Y-%m-%d %H:%M:%S'
Entonces, ¿cómo puedo convertir esto automáticamente con un shell bash como este ./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
Respuesta1
Puede utilizar el read
comando para separar los campos. Por lo tanto, debe establecer la variable separadora de campos en ,
para indicar que los campos están separados por comas. Luego podrás volver a cambiarlo si necesitas hacer otras cosas en el script:
#!/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
(Esto supone la fecha GNU; -d
por ejemplo, la fecha FreeBSD hace algo diferente).