У меня есть CSV-файл (с именем a.csv
), экспортированный из DB mongo, вот так:
...
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
...
Я хочу импортировать этот файл в MySQL, но этот формат даты не может быть вставлен. Поэтому у меня есть идея преобразовать это в формат b.csv
до вставки в 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
...
Это команда bash, которую я использую для преобразования даты в bashdate -d"Thu Apr 27 2017 23:19:52 GMT+0700 (ICT)" +'%Y-%m-%d %H:%M:%S'
Так как же мне преобразовать это автоматически с помощью оболочки bash ./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
решение1
Вы можете использовать read
команду для разделения полей. Поэтому вы должны установить переменную разделителя полей, чтобы ,
указать, что поля разделены запятыми. Вы можете позже изменить ее обратно, если вам нужно будет сделать что-то еще в скрипте:
#!/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
(Предполагается, что используется дата GNU, -d
например, в FreeBSD дата делает что-то другое.)