Convertir fecha en bash shell

Convertir fecha en bash shell

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.csvantes 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 readcomando 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; -dpor ejemplo, la fecha FreeBSD hace algo diferente).

información relacionada