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.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 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 read
comando 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, -d
por exemplo, a data do FreeBSD faz algo diferente.)