bash 转换文件中的 unixtimestamp

bash Convert unixtimestamp in file

我想转换文件中的 unix 时间戳。我使用了一个 bash 脚本,它从互联网上加载了一个文件。 文件中的数据如下所示:

line 09 to Allstrom 1486568580 is ok
line 19 to rom      1486568450 is ok

如何将此 unixtimestamp 转换为人类日期?我知道我必须使用 date -ud timestamp 但我怎样才能在我的 bash 脚本中获取时间戳?

谢谢你帮助我

马库斯

您可以创建一个 Awk 以在 EPOCH 值上调用 date -d,转换为所需的时间戳格式并打印该行的其余部分,

awk '{ cmd="date -d@"" +'%H:%M:%S'"; cmd | getline mydate; close(cmd); =mydate}1' file
line 09 to Allstrom 21:13:00 is ok
line 19 to rom 21:10:50 is ok

awk 中的 cmd | getline 语法允许您在 awk 变量 mydate 中捕获 date 的结果以便稍后打印。

(或)在包含 EPOCH 值的 column 5 上使用本机 gawk 函数 strftime

awk '{=strftime("%H:%M:%S", )} 1' file
line 09 to Allstrom 21:13:00 is ok
line 19 to rom 21:10:50 is ok

鉴于:

$ cat file
line 09 to Allstrom 1486568580 is ok
line 19 to rom      1486568450 is ok

您完全可以在 gawk 中执行此操作,如下所示:

$ awk '{$(NF-2)=strftime("%Y-%m-%d %H:%M:%S", $(NF-2))} 1' file
line 09 to Allstrom 2017-02-08 07:43:00 is ok
line 19 to rom 2017-02-08 07:40:50 is ok

这只是 gawk,不是 POSIX awk。

Perl

当地时间
perl -le ' print scalar localtime(1486568580)'

Wed Feb 8 19:13:00 2017

或 GMTime
perl -le ' print scalar gmtime(1486568580)'

Wed Feb 8 15:43:00 2017


如果你想作为一个文件
perl -a -le ' print "@F[0,1,2,3] ", scalar localtime($F[4]), " @F[5,6]"' file

输出

line 09 to Allstrom Wed Feb  8 19:13:00 2017 is ok  
line 19 to rom Wed Feb  8 19:10:50 2017 is ok