Converter data no shell bash

Converter data no shell bash

Eu tenho um arquivo csv (nomeado a.csv) exportado do DB mongo assim:

...
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
...

Quero importar este arquivo para MySQL mas este formato de data não pode ser inserido. Então, eu tenho uma ideia de converter isso b.csvantes de inserir no 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 é o comando bash que uso para converter data em bashdate -d"Thu Apr 27 2017 23:19:52 GMT+0700 (ICT)" +'%Y-%m-%d %H:%M:%S'

Então, como posso converter isso automaticamente com o 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

Responder1

Você pode usar o readcomando para separar os campos. Portanto, você deve definir a variável separadora de campo para ,indicar que os campos são separados por vírgula. Posteriormente, você poderá alterá-lo novamente se precisar fazer outras coisas no 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

(Isso pressupõe a data GNU, -dpor exemplo, a data do FreeBSD faz algo diferente.)

informação relacionada