일치하지 않는 패턴 사이의 선을 제외하고 패턴 사이의 선을 인쇄합니다.

일치하지 않는 패턴 사이의 선을 제외하고 패턴 사이의 선을 인쇄합니다.

그래서 다음과 같은 입력이 있습니다.

start 
abcd
sfd 
afsdaf
afsaf
end 1

start 
sdfo
efsf
end 0

start 
sdf
efsf
end 2

따라서 시작과 끝(포함) 사이의 줄만 인쇄하고 싶지만 줄의 두 번째 필드가 end0보다 큰 경우에만 인쇄하고 싶습니다(따라서 startand end 1, startand 사이, and 사이 end 2는 아님 ). 내가 할 수 있는 방법이 있나요?startend 0

답변1

$ awk -v RS= -v ORS='\n\n' '$NF' file
start
abcd
sfd
afsdaf
afsaf
end 1

start
sdf
efsf
end 2

귀하의 레코드는 빈 줄로 구분되어 있고 모두 "start"로 시작하고 "end"로 끝나기 때문에 "start"로 시작하고 "end"로 끝난다는 사실은 부적합합니다. 우리가 고려해야 할 점은 위에 표시된 것처럼 각 빈 줄로 구분된 단락의 마지막 공백으로 구분된 필드가 0이 아니라는 것입니다. If RS is null에서 찾고https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.htmlRS=무엇을 해야할지 모르는 경우 .

답변2

awk '
/start/ { toprint=$0 ; save=1; next }
save { toprint = toprint "\n" $0 ; } 
/end/ {if (($2> 0) && save) { print toprint ;} save=0 }'

"시작" 줄이 보이면 저장을 시작하세요. 저장하려면 인쇄할 내용에 데이터를 추가하세요. "끝" 줄이 보이면 저장 중이고 두 번째 필드가 0보다 큰 경우 현재 있는 내용을 인쇄한 다음 저장을 중지하세요.

관련 정보