如何 grep 文件中的时间戳?我正在寻找小时数字

如何 grep 文件中的时间戳?我正在寻找小时数字

我正在使用 BASH 制作一个脚本,该脚本从文件 (~/logs/Server_Info.log) 中获取时间戳。具体来说,我想从时间戳中提取小时数字并将其记录到变量中。

这是我用于时间戳的格式:

date +"%b-%d-%Y-%I:%M:%S %p"

我使用这个脚本来提取数据:

#!/bin/bash
LAST_HOUR="$(( $(date +%I) - 1 ))"
SEARCH_STRING=$(date +"%b-%d-%Y-${LAST_HOUR}:")

timeval=$(grep "${SEARCH_STRING}" ~/logs/Server_Info.log)
echo "$timeval"

exit 0

然而,每当我执行这个脚本时,我要么得到两个答案:

空白输出

-或者-

04

这是完全错误的,因为我的时间戳是

Mar-24-2017-05:07:00 PM 

答案1

对于 awk,它是这样的:

$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4}') && echo $var
04
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4 - 1}') && echo $var
3

答案2

日志文件包含 2017-03-15T08:00:23.698411Z 格式的日期格式。如果此时间采用 UTC 格式,即 2017-03-15T08:00:23.698411Z(时间和日期为 08:00:23 和 2017-03-15),则需要将其转换为 IST。最后一小时使用以下命令

date -d '2017-03-15T08:00:23.698411Z last hours' -u +%s

1489561223

date -d @1489561223 +"%Y/%m/%d-%H:%M:%S"

2017/03/15-07:00:23

想要回到 2 小时前,则使用“2 小时前”而不是“最后几个小时”。

注意:- 我在 Linux 服务器中运行上述命令,并且我的 Linux 服务器计时是 UTC。如果您想在 IST Linux 服务器中运行上述命令,那么您必须再添加 5 小时 30 分钟(例如:-“6 小时 30 分”)分钟前”而不是“最后几个小时”)。

相关内容