다음과 같은 날짜/시간 형식의 파이프로 구분된 파일이 있습니다 yyyymmddhhmmss
.
John|Doe|TEST|20210728120821|[email protected]
John|Davis|TEST|20210828120821|[email protected]
John|Smith|TEST|20210528120821|[email protected]
yyyy-mm-dd hh:mm:ss
4열의 문자열을 이렇게 변환하려고 합니다.
John|Doe|TEST|2021-07-28 12:08:21|[email protected]
John|Davis|TEST|2021-08-28 12:08:21|[email protected]
John|Smith|TEST|2021-05-28 12:08:21|[email protected]
Linux에서 텍스트 처리를 처음 접했기 때문에 awk
다음과 같은 것을 검색하고 사용해 보았습니다.
awk -F"|" '{OFS="|"; $4=strftime("%Y-%m-%d %H:%M:%S", $4); print $0}'
하지만 예상대로 변환되지 않습니다.
ベストアンサー1
이러한 "타임스탬프"는 epoch 이후의 초 단위가 아니며 strftime()
연도, 월 등 구분 기호가 없는 날짜+시간일 뿐입니다. 시간 함수를 사용하는 대신 간단한 텍스트 조작만 하면 됩니다.
gensub()를 실행하려면 (이미 사용하고 있는) GNU awk를 사용하십시오.
$ awk 'BEGIN{FS=OFS="|"} {$4=gensub(/(.{4})(..)(..)(..)(..)(..)/,"\\1-\\2-\\3 \\4:\\5:\\6",1,$4)} 1' file
John|Doe|TEST|2021-07-28 12:08:21|[email protected]
John|Davis|TEST|2021-08-28 12:08:21|[email protected]
John|Smith|TEST|2021-05-28 12:08:21|[email protected]
또는 awk를 사용하십시오.
$ awk 'BEGIN{FS=OFS="|"} {$4=sprintf("%s-%s-%s %s:%s:%s", substr($4,1,4), substr($4,5,2), substr($4,7,2), substr($4,9,2), substr($4,11,2), substr($4,13,2))} 1' file
John|Doe|TEST|2021-07-28 12:08:21|[email protected]
John|Davis|TEST|2021-08-28 12:08:21|[email protected]
John|Smith|TEST|2021-05-28 12:08:21|[email protected]