AWK에서 unix 타임스탬프를 hh:mm:ss:SSS(여기서 SSS는 밀리초)로 변환합니다.

AWK에서 unix 타임스탬프를 hh:mm:ss:SSS(여기서 SSS는 밀리초)로 변환합니다.

AWK에서 Unix 타임스탬프를 hh:mm:ss:SSS(여기서 SSS는 밀리초)로 변환하는 방법.

예를 들어:

echo 1456478048306 > time
cat time | awk ....... > readable_time_format

답변1

GNU 사용 date:

d=1456478048306
s=${d%???}
ms=${d#"$s"}

date -d "@$s" +"%F %T.$ms %z"
# or:
date -d "$s.$ms" '+%F %T.%3N %z'

BSD 사용 date:

date -r "$s" +"%F %T.$ms %z"

awkGNU 및 최신 버전 사용 mawk( 이후 1.3.4 20121129):

echo 1456478048306 | awk '{
  print strftime("%F %T." substr($0,length-2) " %z", substr($0, 1, length-3))}'

이식성을 위해서는 perl아마도 가장 좋은 방법은 다음과 같습니다.

echo 1456478048306 | perl -MPOSIX -lne '
  print strftime "%F %T.$2 %z", localtime $1 if /(.+)(.{3})/'

내가 선호하는 좀 더 전통적이고 명시적인 형식은 다음과 같습니다.

2016-02-26 09:14:08.306 +0000

물론 strftime원하는 대로 형식을 조정할 수 있습니다.

답변2

시간대와 윤초에 관심이 없고 어떤 이유로 awk가 이를 지원하지 않는 경우 strftime직접 계산할 수 있습니다.

awk '{ t=$1;sss=(t % 1000); t/=1000; ss=(t%60); t/=60; mm=(t%60);
  t/=60; hh=(t%24); printf("%02d:%02d:%02d.%03d\n",hh,mm,ss,sss); }'

관련 정보