我想检测一下案例:我在其中不找到我的范围的结尾。鉴于此awk
命令:
awk '/^START/,/^STOP/ { print $1,$2 }' x.dat
和这个数据:
garb
START d1
stuff d2
STOP d3
garb
START d1
如何检测到第二次 START后面没有停止?原因是错误检测。当检测到这种情况时,我想“发出”某种错误信号。
答案 0 :(得分:1)
永远不要使用范围表达式,因为它们使得琐碎的任务变得非常简单,但是更有趣的是需要重复条件或完全重写。而不是:
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
如果没有更多细节和具体的样本输入/输出进行测试,那就是我能做的最好的......
答案 1 :(得分:0)
这取决于你想做什么。您可以查看输出并查看最后一行是否与“STOP”匹配。如果您想在awk
内检测到它,可以执行以下操作:
awk '/^START/,/^STOP/ { print $1,$2; a=1 } /^STOP/{a=0}
END{ if(a) {
# condition detected
}}'
但目前还不清楚你想做什么。