Преобразование даты в оболочке bash

Преобразование даты в оболочке bash

У меня есть 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 дата делает что-то другое.)

Связанный контент