%20%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
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"
awk
GNUおよび最新バージョンを使用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); }'