比较两个时间戳列,如果差异大于 1 小时,则触发电子邮件警报 (bash)



我有一个看起来像这样的文件:

user1,135.4,MATLAB,server1,14:53:59,15:54:28
user2,3432,Solver_HF+,server1,14:52:01,14:54:28
user3,3432,Solver_HF+,server1,14:52:01,15:54:14
user4,3432,Solver_HF+,server1,14:52:01,14:54:36

我想在最后两列之间进行比较,如果差异大于一个小时(例如第 1 行和第 3 行),它将触发如下内容:

echo "individual line from file" | mail -s "subject" email@site.com

我试图使用 awk 提出一个可能的解决方案,但我对 linux 仍然相当陌生,无法完全弄清楚一些有效的方法。

以下 awk 脚本可能是您想要的

awk 'BEGIN{FS=","}
{a="2019 01 01 " gensub(":"," ","g",$5);
b="2019 01 01 " gensub(":"," ","g",$6);
c = int((mktime(b)-mktime(a))/60)}
{if (c >= 60){system("echo "individual line from file" | mail -s "subject" email@site.com")}}' your_filename

然后将 scritps 放入crontab或其他触发器中 例如

*/5 * * * *  awk_scripts.sh

如果您只想检查新行. 使用tail -n filename可能比cat更有用

你来了:(由于 mktime,使用 gnu awk)

awk -F, '{
split($(NF-1),t1,":");
split($NF,t2,":");
d1=mktime("0 0 0 "t1[1]" "t1[2]" "t1[3]" 0");
d2=mktime("0 0 0 "t2[1]" "t2[2]" "t2[3]" 0");
if (d2-d1>3600) print $0}' file
user1,135.4,MATLAB,server1,14:53:59,15:54:28
user3,3432,Solver_HF+,server1,14:52:01,15:54:14
  • 使用字段分隔符作为逗号来获取倒数第二个和最后一个字段。
  • 将两个野战旅馆拆分为阵列t1t2以获得小时最小秒
  • MKtime将其转换为秒。
  • 做数学运算,只打印超过3600秒的行
  • 然后可以通过管道将其传送到其他命令。

看看时间函数是如何使用的 int gnu awk: https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html

最新更新