Bash:使用awk从文件中获取的日期时间字符串获取纪元时间
Posted
技术标签:
【中文标题】Bash:使用awk从文件中获取的日期时间字符串获取纪元时间【英文标题】:Bash: Obtain epoch time from date time string taken from file using awk 【发布时间】:2018-11-24 09:16:14 【问题描述】:首先,对不起,因为标题可能不是一个好标题。实在想不出什么好标题,但我会尽量在这里解释,所以就这样吧,
我有一个名为 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 格式保存日期时间字符串。
希望听到您的建议!谢谢你
【问题讨论】:
***.com/questions/42055212/… 【参考方案1】:这可能是你想要的,需要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
【讨论】:
【参考方案2】:cat logfile|awk 'print($1,$2)' |xargs -n 1 -I_ date +'%s' --date=_
收藏文件。然后 awk 前两个字段。并使用“xargs -n 1”一次将一个数据传递给日期命令,并使用 %s 获取纪元。
【讨论】:
awk 可以自己打开文件。谷歌 UUOC。以上是关于Bash:使用awk从文件中获取的日期时间字符串获取纪元时间的主要内容,如果未能解决你的问题,请参考以下文章
使用 awk getline bash 在指定的时间范围内从日志文件中提取数据
使用 sed / awk / bash 将缺失的行号填充到文件中