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