我有以下awk
文件。问题是当有匹配的$0 ~ end_ere
行被打印时。但我想要的是,仅当先前存在匹配项时才打印该行$0 ~ beg_ere
。我能做些什么?
beg_ere
匹配节的开头,而
end_ere
匹配节的结尾。
pn_ere
删除行开头的注释字符。
如果为 true,则打印与 和
showpr
匹配的行。否则,仅打印剖面线内的线(意味着匹配和 的线不打印)。beg_ere
end_ere
beg_ere
end_ere
$0 ~ beg_ere {
display = 1
if ( ! showpr ) { next }
}
$0 ~ end_ere {
if (( display == 1 )); then
if ( ! showpr ) { print "" }
else { sub(pn_ere, "") ; print ; print "" }
fi
display = 0
}
display { sub(pn_ere, "") ; print }
答案1
从您的描述来看,这听起来像是您想要做的事情:
$0 ~ beg_ere {
inBlock = 1
}
inBlock {
lines[++numLines] = $0
if ( $0 ~ end_ere ) {
delta = ( showpwr ? 0 : 1 )
for ( lineNr=(1+delta); lineNr<=(numLines-delta); lineNr++ ) {
sub(pn_ere, "", lines[lineNr])
print lines[lineNr]
}
inBlock = numLines = 0
}
}
但显然我无法测试它,因为您没有在问题中提供任何示例输入/输出,并且问题中的代码不是可以执行的最小完整脚本。