날짜 형식 변경 [중복]

날짜 형식 변경 [중복]

날짜가 하위 문자열로 포함된 문자열이 있는 경우 해당 하위 문자열을 한 날짜 형식에서 다른 날짜 형식으로 변환하려면 어떻게 해야 합니까? 보다 구체적으로 다음과 같은 질문이 있습니다.

  1. 날짜 문자열 "10/24/2017 8:00:00 AM"을 날짜 문자열 "20171024 8:00:00 AM"으로 변환하는 방법은 무엇입니까?

  2. "Data1|Data2|Data3|10/24/2017 오전 8:00:00"을 "Data1|Data2|Data3|20171024 오전 8:00:00"으로 변환하는 방법은 무엇입니까?

  3. 이 형식의 행(예: 파이프로 구분된 데이터)이 포함된 "Sample.csv"라는 파일이 있는 경우 "Sample.csv"의 각 행에 있는 날짜를 어떻게 변환합니까(이전 질문에서처럼)?

답변1

date찾고 있는 명령은 다음과 같습니다 .

date -d '${DATE_STRING}' '+%Y%m%d %H:%M:%S %p'

-d(동등) 플래그는 --date날짜/시간 입력을 나타내는 문자열을 지정하는 데 사용됩니다. 설명서에는 다음과 같이 나와 있습니다.

날짜 문자열

--date=STRING은 "Sun, 29 Feb 2004 16:21:42 -0800" 또는 "2004-02-29 16:21:42" 또는 "Next"와 같이 사람이 읽을 수 있는 대부분의 자유 형식 날짜 문자열입니다. 목요일" . 날짜 문자열에는 달력 날짜, 시간, 시간대, 요일, 상대 시간, 상대 날짜 및 숫자를 나타내는 항목이 포함될 수 있습니다. 빈 문자열은 하루의 시작을 나타냅니다. 날짜 문자열 형식은 여기에 쉽게 설명된 것보다 더 복잡하지만 정보 문서에 자세히 설명되어 있습니다.

게시물에 제공된 날짜 문자열을 사용하면 위의 예는 다음과 같습니다.

date -d '10/24/2017 8:00:00 AM' '+%Y%m%d %H:%M:%S %p'

제공한 예의 전체 문자열에서 날짜를 추출하려면 다음을 수행할 수 있습니다.

DATE_STRING="Data1|Data2|Data3|10/24/2017 8:00:00 AM"
date -d "$(echo "${DATE_STRING}" | cut -d'|' -f4)" '+%Y%m%d %H:%M:%S %p'

단일 문자열에 대해 원하는 최종 결과를 얻으려면 다음과 같이 할 수 있습니다.

DATE_STRING="Data1|Data2|Data3|10/24/2017 8:00:00 AM"
echo "$(echo "${DATE_STRING}" | cut -d'|' -f1,2,3)|$(date -d "$(echo "${DATE_STRING}" | cut -d'|' -f4)" '+%Y%m%d %H:%M:%S %p')"

마지막으로 파일의 모든 줄에서 이 명령을 실행하려면 다음을 수행할 수 있습니다.

while read line; do echo "$(echo "${DATE_STRING}" | cut -d'|' -f1,2,3)|$(date -d "$(echo "${DATE_STRING}" | cut -d'|' -f4)" '+%Y%m%d %H:%M:%S %p')"; done < Sample.csv

관련 정보