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 将其发送到另一个文件

使用 awk getline bash 在指定的时间范围内从日志文件中提取数据

在 bash/sed/awk 中提取文件的最后一个单词

使用 sed / awk / bash 将缺失的行号填充到文件中

带有 jq 的 Bash 脚本不会从字符串中获取日期差异,并且在 i7 16GB RAM 上运行非常缓慢

在 BASH 脚本中使用“awk”将列添加到 CSV 文件的末尾