bash在文件中转换unixtimestamp

时间:2017-02-08 15:56:38

标签: bash unix unix-timestamp

我想在文件中转换unixtimestamp。我使用了一个bash脚本,它从Internet上加载一个文件。 文件中的数据如下所示:

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

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

感谢帮助我

Markus

3 个答案:

答案 0 :(得分:2)

假设:

$ 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。

答案 1 :(得分:1)

您可以Awk拨打date -d上的EPOCH,转换为所需的时间戳格式并打印其余部分,

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

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

(或)使用包含gawk值的strftime上的原生column 5函数EPOCH

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

答案 2 :(得分:1)

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