Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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
Awk 使用范围模式如何检测范围内的EOF?_Awk_Gawk - Fatal编程技术网

Awk 使用范围模式如何检测范围内的EOF?

Awk 使用范围模式如何检测范围内的EOF?,awk,gawk,Awk,Gawk,我想检测这样的情况:在这种情况下,我不不找到范围的终点。给定此awk命令: awk '/^START/,/^STOP/ { print $1,$2 }' x.dat 这些数据: garb START d1 stuff d2 STOP d3 garb START d1 如何检测第二次启动后没有停止?原因是错误检测。我想在检测到某种错误时发出“信号”。这取决于您想做什么。您可以查看输出,看看最后一行是否与“STOP”匹配。如果要在awk中检测它,可以执行以下操作: awk '/^START

我想检测这样的情况:在这种情况下,我不找到范围的终点。给定此
awk
命令:

 awk '/^START/,/^STOP/ { print $1,$2 }'  x.dat 
这些数据:

garb
START d1
stuff d2
STOP d3
garb
START d1

如何检测第二次启动后没有停止?原因是错误检测。我想在检测到某种错误时发出“信号”。

这取决于您想做什么。您可以查看输出,看看最后一行是否与“STOP”匹配。如果要在
awk
中检测它,可以执行以下操作:

awk '/^START/,/^STOP/ { print $1,$2; a=1 } /^STOP/{a=0} 
    END{ if(a) { 
      # condition detected
     }}' 

但是你想做什么还不是很清楚。

千万不要使用范围表达式,因为它们会使琐碎的任务变得非常简单,但更有趣的事情需要重复条件或完全重写。而不是:

awk '/^START/,/^STOP/ { print $1,$2 }' x.dat 
你应该写:

awk '/^START/{f=1} f{ print $1,$2 } /^STOP/{f=0}' x.dat
然后,您的新需求可能只需要:

awk '/^START/{f=1} f{ print $1,$2 } /^STOP/{f=0} END{if (f) print "The sky is falling!"}' x.dat

没有更多的细节和具体的样本输入/输出来测试,这是我能做的最好的了……

请在你的帖子中提及预期的输出。这是用于错误检测的。如果我看不到停止,就会发生不好的事情。