Bash 脚本,将查找与当前日期和时间关联的特定行


c=$(awk -v d1="$(date --date="-30 min" "+%b %_d %H:%M")" -v d2="$(date 
"+%b %_d %H:%M")" '$0 > d1 && $0 < d2 || $0 ~ d2' /var/place/message| 
grep -ci "Important message") 
if [ $c-gt 0 ] 
then
 echo "Found message"
else
 echo "fail"
fi

我希望我的脚本能够在日志中找到一条重要消息,这些消息是顺便说一句,当前时间和-30分钟。

日志如下所示

三月 14 03:03:41 等等"重要信息">

三月 14 03:03:42 等等

等等

三月 14 03:03:43 等等

等等

三月 14 03:31:41 等等等等"重要信息">

因此,如果当前时间为 4:00:00,它将找到最后一行。这根本行不通..我得到两个错误。第一个是 grep 找不到消息,第二个是"-gt 一元运算符预期"。任何指导都会很棒。第一次用 bash 编写脚本!!谢谢:(

您的日期格式与您的日志不匹配。

$ awk -v d1="$(date -d "-30 min" "+%B %d %H:%M")"    
      -v d2="$(date "+%B %d %H:%M")" '
       $0>d1 && $0<d2 && /Important message/ {c++}
       END {print c; exit !c}' file

只需检查此脚本的返回状态即可。 如果不需要计数,可以去除一些噪音(c++后加;exit,去掉print c

或者,您也可以在同一脚本中添加"找到"或"失败"消息...

铌。这在月更改的午夜左右不起作用,例如April xx < March xx基于词汇顺序。

最新更新