bashシェルから日付を変換する

bashシェルから日付を変換する

a.csv以下のように、DB mongoからエクスポートされたcsvファイル(名前が指定されています)があります。

...
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.csvMySQLに挿入する前に変換するアイデアがあります

...
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 bashから日付を変換するために使用するbashコマンドです。date -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

(これは-dFreeBSDの日付と同様に、GNUの日付が異なる操作を実行すると仮定します。)

関連情報