在 bash shell 中轉換日期

在 bash shell 中轉換日期

我有一個從 DB mongo 匯出的 csv 檔案(名為a.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 指令 bashdate -d"Thu Apr 27 2017 23:19:52 GMT+0700 (ICT)" +'%Y-%m-%d %H:%M:%S'

那麼要如何使用這樣的 bash shell 自動轉換它呢./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 日期做了不同的事情。)

相關內容