我是BASH的新手,我正在尝试编写一个基本脚本来满足我的以下要求,但我被困住了,并且非常感谢您理解的帮助
要求:
我有一个输出的命令,我只需要使用关键字" Executin"找出开始时间与系统时间的差异,如果差异超过4小时,则显示整行。
OUTPUT:(按空格分隔)
UNIQUE ID FILENAME TYPE DATE STATE STATUS STARTED ENDED
-------- ----------------- ---- -------- -------- ------
0000k66w ABCDEF TBL 20180224 Executin OK 20180224060128
0000k678 GHIJKL TBL 20180224 Ended OK OK 20180227060202 20180228054016
0000k67a MNOPQRS TBL 20180224 Executin OK 20180224200000
0000k67d PBKPUXBIP1XD01G TBL 20180224 FAILED OK 20180227150000 20180227150118
我试图在上面的输出中应用的脚本是
//mycommand | awk' {if ($5 == Executin) && if(( `date '+%Y%m%d%H%M%S'` - $7 ) gt 40000)} ; print ;}'
获取语法错误
答案 0 :(得分:0)
awk
$ awk 'BEGIN{ "date +%Y%m%d%H%M%S" | getline d} {if($5=="Executin") if(d-$7>40000) print}'
"date +%Y%m%d%H%M%S" | getline d;
:日期将存储在d
中。系统调用很昂贵并且将其保留在BEGIN
块中会在awk处理开始时仅触发一次系统调用,从而提高性能。
if(d-$7>40000) print
:如果差异为>40000
则打印记录。