awk를 사용하여 csv에서 날짜 순서 형식 지정

awk를 사용하여 csv에서 날짜 순서 형식 지정

다음 데이터 구조를 포함하는 csv 파일이 있습니다: [MM/DD/YYYY]

1111,2222,3333,4444,5555,6666,7777,11/27/2017 18:58:48,11/27/2017 19:07:57

내 목표는 날짜 형식을 [YYYY/MM/DD]로 변경하는 것입니다.

1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57

이 작업을 수행하기 위해 awk를 사용하려고 하지만 해당 작업을 수행할 수 있는 다른 도구도 사용할 수 있습니다.

답변1

Awk해결책:

awk -F',' 'function reformat_date(c){     # `c` - column value as an argument
               y = substr(c, 7, 4);       # extract `year` value
               sub(/\/[0-9]{4}/, "", c);  # remove `year` value
               return y"/"c               # return rearranged `YYYY/MM/DD` value
           }
           { $8 = reformat_date($8); $9 = reformat_date($9) }1' OFS=',' file.csv

예제 출력:

1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57

답변2

이 시도:

sed -E 's|([0-9]{2}/[0-9]{2})/([0-9]{4})|\2/\1|g' file

또는

perl -pe 's|(\d{2}/\d{2})/(\d{4})|$2/$1|g' file

산출:

1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57

답변3

데이터에 날짜와 유사한 다른 형식이 포함되어 있지 않으면 sed전체 행을 사용하여 날짜를 변경할 수 있습니다.

sed 's#\([0-9][0-9]\)/\([0-9][0-9]\)/\([0-9][0-9][0-9][0-9]\)#\3/\1/\2#g'

관련 정보