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 날짜가 다른 작업을 수행한다고 가정합니다.)

관련 정보