Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何编写AWK命令以查找差异和比较_Bash_Awk - Fatal编程技术网

Bash 如何编写AWK命令以查找差异和比较

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

我是BASH新手,我正试图编写一个基本脚本来满足我下面的要求,但我被困住了,非常感谢您的帮助

要求:

我有一个命令,它给出了输出,从中我只需要获取带有关键字“Executin”的列,并找到开始时间与系统时间的差异,如果差异超过4小时,则显示整行

输出:(用空格分隔)

我试图应用于上述输出的脚本是

//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}'