我想搜索一个字符串并从当前时间中减去找到的时间。使用时,脚本应显示该时间或下一个日志时间帧中的行。
我可以搜索字符串并从当前时间中减去时间,但它会搜索准确的时间并给出结果。
我希望脚本能够查找准确时间。如果未找到准确时间,则应显示从最接近当前时间的记录时间到结果,并显示日志行。
预期输出:
如果在日志文件中找不到字符串和时间,脚本应该智能地从最近的日志时间中选择,并显示从该时间到当前时间有多少个带有该字符串的日志。
答案1
以下脚本假设您想要查找参数 2 中的文本,后跟:
,后跟参数 3 中格式化为的日期YYYY-M-D-h:m:s
,即没有前导零,如问题中的代码片段所示。
#!/bin/bash
logfile="$1"
message="$2"
timestamp=$(printf '%d-%d-%d-%d:%d:%d' `date -d "$3" +"%Y %m %d %H %M %S"`)
if grep -q "^../../.. ..:..:.. $message : $timestamp\$" "$logfile"; then
echo "OK: $message $timestamp found on $logfile"
else
echo "CRITICAL - $message $timestamp not found on $logfile"
exit 1
fi