将历元(秒)格式的datereplace为日志文件中的正常

我在一台试图从日志文件中读取的Ubuntu机器上,发现日志包含时间格式(秒)的date和时间。 如何将这些date的数字转换成命令行的可读格式?

1411622206, HOST ALERT, host-001,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. 1411622586, HOST ALERT, host-001,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. 1411623976, HOST ALERT, host-021,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. 1411624986, HOST ALERT, host-055,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. 1411625076, HOST ALERT, host-023,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. 1411625356, HOST ALERT, host-032,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. 1411625736, HOST ALERT, host-044,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. 

怎么样使用date -d@SECONDS_SINCE_1970 [some format]

 while IFS=, read -r f1 f2 do echo "$(date -d@$f1),$f2" done < file 

然后你可以玩date选项,这样你可以得到例如:

 $ date -d@1411622586 "+%D %T" 09/25/14 07:23:06 

testing

 $ while IFS=, read -r f1 f2; do echo "$(date -d@$f1),$f2"; done < file Thu Sep 25 07:16:46 CEST 2014, HOST ALERT, host-001,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. Thu Sep 25 07:23:06 CEST 2014, HOST ALERT, host-001,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. Thu Sep 25 07:46:16 CEST 2014, HOST ALERT, host-021,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. Thu Sep 25 08:03:06 CEST 2014, HOST ALERT, host-055,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. Thu Sep 25 08:04:36 CEST 2014, HOST ALERT, host-023,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. Thu Sep 25 08:09:16 CEST 2014, HOST ALERT, host-032,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. Thu Sep 25 08:15:36 CEST 2014, HOST ALERT, host-044,DOWN,SOFT,1,CHECK_NRPE, Socket timeout after 10 seconds. 

date手册( info date ):

要将如此难以处理的秒数转换回更易读的forms,请使用如下所示的命令:

 # local time zone used date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z" 1999-12-31 19:00:00 -0500 

或者,如果您不介意自从coreutils 5.3.0以来存在的@特性,则可以将其缩短为:

 date -d @946684800 +"%F %T %z" 1999-12-31 19:00:00 -0500 

通常最好输出UTC相对date和时间:

 date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z" 2000-01-01 00:00:00 +0000