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中找到了但我只需输出中间的第三个模式.
这个 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)