awk를 사용하여 ISO 8601 형식 열의 타임스탬프 변경

awk를 사용하여 ISO 8601 형식 열의 타임스탬프 변경

나는 다음과 같은 결과를 얻었습니다.

echo "$i"
**@timestamp:** `2023-01-18T15:08:36.698Z`

awk출력 해서 다음과 같이 만들고 싶습니다 .

Wed 18 Jan 2023 06:50:38 PM EST

이것이 내가 지금까지 시도한 것입니다:

echo "$i" | awk -F'`' '{print $1, "`"strftime("%Y-%m-%d %T", $2)"`"}'
**@timestamp:**  `1969-12-31 19:33:43`

왜 1969년이라고 되어 있는지 잘 모르겠습니다...아시나요?

date 명령은 형식을 완벽하게 감지하고 수정할 수 있습니다.

date -d $(echo "$i" | awk -F'`' '{print $2}')
Wed 18 Jan 2023 10:08:36 AM EST

왜 awk가 작동하지 않습니까?

답변1

주석에서 이미 지적했듯이 다른 도구 시간 기능이 GNU의 date. GNU awk의 시간 함수를 사용하여 수행하려는 작업을 수행하는 방법은 다음과 같습니다.

$ TZ='EST' awk -F'`' '{print strftime("%a %d %b %Y %T %Z",mktime(gensub(/[^0-9]/," ","g",$2),1))}' file
Wed 18 Jan 2023 10:08:36 EST

또는 실제로 원하는 출력이 코드에서 수행하려는 결과인 경우:

$ TZ='EST' awk -F'`' '{print strftime("%F %T %Z",mktime(gensub(/[^0-9]/," ","g",$2),1))}' file
2023-01-18 10:08:36 EST

관련 정보