我有一个看起来像这样的文件:
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
- 使用字段分隔符作为逗号来获取倒数第二个和最后一个字段。
- 将两个野战旅馆拆分为阵列
t1
和t2
以获得小时最小秒 - MKtime将其转换为秒。
- 做数学运算,只打印超过
3600
秒的行 - 然后可以通过管道将其传送到其他命令。
看看时间函数是如何使用的 int gnu awk: https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html