Data de conversão no shell bash [duplicado]

1

Eu tenho um arquivo csv (chamado 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
...

Eu quero importar este arquivo para o MySQL, mas este formato de data não pode ser inserido. Então eu tenho uma idéia para converter isso em b.csv antes 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 bash comando bash que eu uso para converter data no bash date -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
    
por Uncelvel 31.05.2017 / 05:33

1 resposta

3

Você pode usar o comando read para separar os campos. Portanto, você deve definir a variável do separador de campo como , para indicar que os campos são separados por vírgulas. 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

(Isto assume data GNU, -d em por exemplo a data do FreeBSD faz algo diferente.)

    
por 31.05.2017 / 07:39