仅当存在开始匹配时才打印结束匹配

仅当存在开始匹配时才打印结束匹配

我有以下awk文件。问题是当有匹配的$0 ~ end_ere行被打印时。但我想要的是,仅当先前存在匹配项时才打印该行$0 ~ beg_ere。我能做些什么?

beg_ere匹配节的开头,而 end_ere匹配节的结尾。

pn_ere删除行开头的注释字符。

如果为 true,则打印与 和 showpr匹配的行。否则,仅打印剖面线内的线(意味着匹配和 的线不打印)。beg_ereend_erebeg_ereend_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
    }
}

但显然我无法测试它,因为您没有在问题中提供任何示例输入/输出,并且问题中的代码不是可以执行的最小完整脚本。

相关内容