在 AWK 中将 unix 时间戳转换为 hh:mm:ss:SSS(其中 SSS 是毫秒)

Abu*_*que 1 linux awk timestamps time

如何在 AWK 中将 unix 时间戳转换为 hh:mm:ss:SSS(其中 SSS 是毫秒)。

例如:

echo 1456478048306 > time
cat time | awk ....... > readable_time_format
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

使用 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'
Run Code Online (Sandbox Code Playgroud)

使用 BSD date

date -r "$s" +"%F %T.$ms %z"
Run Code Online (Sandbox Code Playgroud)

使用 GNUawk和最新版本mawk(自1.3.4 20121129):

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

对于便携性,perl可能是你最好的选择:

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

这里给出了我更喜欢的更传统和更明确的格式:

2016-02-26 09:14:08.306 +0000
Run Code Online (Sandbox Code Playgroud)

当然,您可以strftime根据自己的喜好调整格式。