Bash:使用awk从文件中获取的日期时间字符串获取纪元时间

时间:2018-06-14 14:41:13

标签: bash date awk epoch

首先,抱歉,标题可能不是很好。实际上真的不能想到一个好的头衔,但我会尽量在这里解释,所以这里,

我有一个名为 timeInfo 的文件,其中包含以下格式的日期时间字符串,

2018-06-05 00:35:51 Controller shutdown process initiated
2018-06-05 05:32:22 Controller startup process initiated
...
...

现在我要做的是,我需要花时间将其转换为EPOCH并将其存储到临时文件 tempFile 中,到目前为止我尝试过的是... 。

//$file points to **timeInfo** file
echo `grep 'Controller startup' $file  | date -d "`awk '{ print $1,$2 }'`" >> $TEMP_FILE`

使用此功能后,我收到以下错误

  

命令替换:第73行:寻找匹配的“”'

时出现意外的EOF

然后我尝试了另一种方法并使用了以下代码,

echo `grep "Controller startup" $file  | awk '{print $1,$2}' >> $TEMP_FILE`

有了这个,我得到一个文件 tempFile ,其中包含以下信息,

  

2018-06-06 00:35:31

     

2018-06-06 00:51:32

这似乎好多了,但我需要在EPOCH中拥有它!有没有办法可以更改上面的脚本,以便在tempFile中以EPOCH格式保存日期时间字符串。

希望听到你的建议!谢谢

2 个答案:

答案 0 :(得分:3)

这可能是你想要的,需要gawk

$ awk '{t=$1 FS $2; gsub(/[-:]/," ",t); print mktime(t)}' file

1528173351
1528191142

或者这个

$ awk '/Controller (startup|shutdown)/{t=$1 FS $2; 
                                       gsub(/[-:]/," ",t); 
                                       print mktime(t)}' file

答案 1 :(得分:1)

cat logfile|awk '{print($1,$2)}' |xargs -n 1 -I_ date +'%s' --date=_

抓住档案。然后awk前两个字段。和使用" xargs -n 1"将一个数据一次传递给date命令并使用%s传递给纪元。