Bash 如何编写AWK命令以查找差异和比较
我是BASH新手,我正试图编写一个基本脚本来满足我下面的要求,但我被困住了,非常感谢您的帮助 要求: 我有一个命令,它给出了输出,从中我只需要获取带有关键字“Executin”的列,并找到开始时间与系统时间的差异,如果差异超过4小时,则显示整行 输出:(用空格分隔) 我试图应用于上述输出的脚本是Bash 如何编写AWK命令以查找差异和比较,bash,awk,Bash,Awk,我是BASH新手,我正试图编写一个基本脚本来满足我下面的要求,但我被困住了,非常感谢您的帮助 要求: 我有一个命令,它给出了输出,从中我只需要获取带有关键字“Executin”的列,并找到开始时间与系统时间的差异,如果差异超过4小时,则显示整行 输出:(用空格分隔) 我试图应用于上述输出的脚本是 //mycommand | awk' {if ($5 == Executin) && if(( `date '+%Y%m%d%H%M%S'` - $7 ) gt 40000)} ; pr
//mycommand | awk' {if ($5 == Executin) && if(( `date '+%Y%m%d%H%M%S'` - $7 ) gt 40000)} ; print ;}'
获取语法错误awk
$ awk 'BEGIN{ "date +%Y%m%d%H%M%S" | getline d} {if($5=="Executin") if(d-$7>40000) print}'
“日期+%Y%m%d%H%m%S”|获取行d代码>:日期将存储在d
中。系统调用非常昂贵,将其保持在BEGIN
块将在awk处理开始时触发此系统调用一次,从而提高性能
如果(d-$7>40000)打印
:如果差异为>40000
打印记录。由于文件中的日期不是从纪元算起的秒,而是YYYYMMDDHHMMSS格式,您必须使用日期+%s
将其转换为秒格式,然后进行更改,但这也会带来时区和DST的复杂性,谢谢你的评论。输出不在文件中,而是命令的运行时输出。我们使用的工具有几个内部命令,通过这些命令可以导出上述输出,我希望找到不同之处,并仅打印大于4小时的行。@Maya:在这种情况下,只需删除结尾处的|文件
,然后将此命令传输到原始命令。我已将差值更新为40000。我尝试过,但它会打印输出的所有行,而不是大于40000的Executin作业40000@Maya:是否只打印执行作业
行>40000,即放弃结束
,失败
作业行?是的,我只想打印状态为Executin且Started大于40000的行
$ awk 'BEGIN{ "date +%Y%m%d%H%M%S" | getline d} {if($5=="Executin") if(d-$7>40000) print}'