시작 일치가 있는 경우에만 끝 일치를 인쇄합니다.

시작 일치가 있는 경우에만 끝 일치를 인쇄합니다.

다음 파일이 있습니다 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
    }
}

그러나 질문에 샘플 입력/출력을 제공하지 않았고 질문의 코드가 실행될 수 있는 최소한의 완전한 스크립트가 아니기 때문에 분명히 테스트할 수 없습니다.

관련 정보