Unix 搜索条件以查找是否存在前一小时的日志。

Unix 搜索条件以查找是否存在前一小时的日志。,unix,Unix,我正在创建一个unix脚本来检查是否为我们的一个作业生成了日志。日志被保存在文件中,时间戳如下 2017 Apr 11 13:09:54:384 - Required information will be present here. 2017 Apr 11 13:17:31:578 - Required information will be present here. 我们被困在搜索状态,这将检查前一小时是否有日志 我如何编写这个if语句来检查它?这可能是一个有点脏的解决方案,但您可以先为

我正在创建一个unix脚本来检查是否为我们的一个作业生成了日志。日志被保存在文件中,时间戳如下

2017 Apr 11 13:09:54:384 - Required information will be present here.
2017 Apr 11 13:17:31:578 - Required information will be present here.
我们被困在搜索状态,这将检查前一小时是否有日志


我如何编写这个if语句来检查它?

这可能是一个有点脏的解决方案,但您可以先为前一个小时构造“前缀”,即2017年4月11日12日
,然后检查日志文件中有多少行匹配:

#get the prefix
prefix=$(date -d'-1 hour' +'%Y %b %d %H')

#count matching lines
cnt=$(gawk -F':' "\$1==\"$prefix\"" test.log | wc -l)
echo $cnt
假设
test.log
包含

2017 Apr 11 12:09:54:384 - Required information will be present here.
2017 Apr 11 13:17:31:578 - Required information will be present here.

然后,上述变量
cnt
的值将为1(如果date命令生成2017年4月11日12日
)。因此,您可以根据
$cnt
..

对脚本进行分支,这可能是一个有点脏的解决方案,但您可以先为前一个小时构造“前缀”,即2017年4月11日12日
,然后检查日志文件中有多少行匹配:

#get the prefix
prefix=$(date -d'-1 hour' +'%Y %b %d %H')

#count matching lines
cnt=$(gawk -F':' "\$1==\"$prefix\"" test.log | wc -l)
echo $cnt
假设
test.log
包含

2017 Apr 11 12:09:54:384 - Required information will be present here.
2017 Apr 11 13:17:31:578 - Required information will be present here.

然后,上述变量
cnt
的值将为1(如果date命令生成2017年4月11日12日
)。因此,您可以使用
grep
&
date
$cnt
..

的基础上对脚本进行分支:

grep -c "^$(date -d '-1 hour' '+%Y %b %d %H:')"

这里,
date
命令生成与日志文件匹配的时间戳。然后,
grep
查找日志文件中的时间戳
-c
打印文件中匹配行的计数。

使用
grep
date

grep -c "^$(date -d '-1 hour' '+%Y %b %d %H:')"

这里,
date
命令生成与日志文件匹配的时间戳。然后,
grep
查找日志文件中的时间戳
-c
打印文件的匹配行数。

谢谢Ewcz,但您能解释一下为什么称之为“有点脏”的解决方案吗?如果你能提供一些其他的方法,那将非常有帮助。@Wolfgang我的意思是有点脏,因为它不是很健壮,例如它假设由
date
生成的日期/时间与日志中的时间在同一时区-我想更系统的解决方案是编写一个Python脚本来处理这些可能的错误“惊喜“。但是如果保证日志文件格式正确,那么解决方案应该可以,我想……谢谢Ewcz。日志保证仅以这种格式生成。谢谢Ewcz,但您能解释一下为什么称它为“有点脏”的解决方案吗?如果你能提供一些其他的方法,那将非常有帮助。@Wolfgang我的意思是有点脏,因为它不是很健壮,例如它假设由
date
生成的日期/时间与日志中的时间在同一时区-我想更系统的解决方案是编写一个Python脚本来处理这些可能的错误“惊喜“。但是如果保证日志文件格式正确,那么解决方案应该可以,我想……谢谢Ewcz。保证只以这种格式生成日志。看起来确实更短…:)-我只想指出,grep可能应该只在每行的开头搜索,以避免日期/时间字符串意外出现在与可能不同的日期相关联的一些日志消息的正文中…看起来确实更短…:)-我只想指出,grep可能应该只在每行的开头搜索,以避免日期/时间字符串意外出现在与可能不同的日期相关联的一些日志消息的正文中。。。