两个图案之间的中间有图案的awk

Yo *_* Al 5 unix linux shell awk sh

嗨,我正在寻找一个awk,可以找到两个模式,并将它们之间的数据打印到文件,只有在中间有中间的第三个模式.例如:

Start
1
2
middle
3
End
Start
1
2
End

And the output will be:
Start
1
2
middle
3
End
Run Code Online (Sandbox Code Playgroud)

我在web awk'/ patterns1 /,/ patterns2 /'path> text.txt中找到了但我只需输出中间的第三个模式.

anu*_*ava 3

这个 awk 应该可以工作:

awk '$1=="Start"{ok++} ok>0{a[b++]=$0} $1=="middle"{ok++} $1=="End"{if(ok>1) for(i=0; i<length(a); i++) print a[i]; ok=0;b=0;delete a}' file

Start
1
2
middle
3
End
Run Code Online (Sandbox Code Playgroud)

扩展:

awk '$1 == "Start" {
   ok++
}
ok > 0 {
   a[b++] = $0
}
$1 == "middle" {
   ok++
}
$1 == "End" {
   if (ok > 1)
      for (i=0; i<length(a); i++)
         print a[i];
   ok=0;
   b=0;
   delete a
}' file
Run Code Online (Sandbox Code Playgroud)