使用 shell 脚本通过传递变量在日志文件中搜索带有时间的字符串

使用 shell 脚本通过传递变量在日志文件中搜索带有时间的字符串

我想搜索一个字符串并从当前时间中减去找到的时间。使用时,脚本应显示该时间或下一个日志时间帧中的行。

我可以搜索字符串并从当前时间中减去时间,但它会搜索准确的时间并给出结果。

我希望脚本能够查找准确时间。如果未找到准确时间,则应显示从最接近当前时间的记录时间到结果,并显示日志行。

预期输出:

如果在日志文件中找不到字符串和时间,脚本应该智能地从最近的日志时间中选择,并显示从该时间到当前时间有多少个带有该字符串的日志。

答案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

相关内容