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.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で日付を変換するために使用する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
(これは GNU date を前提としていますが、-d
たとえば FreeBSD date では動作が異なります。)