awk를 사용하여 패턴 뒤에 입력 파일 추가(루프?)

awk를 사용하여 패턴 뒤에 입력 파일 추가(루프?)

다음 형식의 "input"이라는 텍스트 파일을 얻으려고 합니다.

line1 
line2
line3
PATTERN
x y z
x y z
lineN

그리고 awk를 사용하여 각 "xy z" 줄 뒤에 숫자(1)를 넣습니다. 출력에서 PATTERN 앞과 "xy z" 줄(lineN) 뒤에 줄이 필요합니다. 필요한 출력은 다음과 같습니다.

line1
line2
line3
PATTERN
x y z   1 
x y z   1
lineN

내가 지금까지 가지고 있는 것은 다음과 같습니다.

awk '/PATTERN/ {getline; print $0 "   1" }' < input > output 

이는 다음을 제공합니다:

x y z   1

awk가 "xy z" 행을 원하는 수만큼 추가하거나 "xy z" 유형 행이 완료되면 중지하도록 루프를 설정할 수 있습니까?

답변1

루프가 도움이 될 수 있습니다:

awk '/PATTERN/{print;getline;while(!/lineN/){$(NF+1)="  1";print;getline}}1'

또는 연장@제니스 아이디어:

awk '/lineN/{f=0}f{$(NF+1)="  1"}/PATTERN/{f=1}1'

답변2

PATTERN 뒤의 "xy z" 줄만 바꿔야 한다는 뜻입니다.

awk '
  /PATTERN/ { f=1 }
  f && /x y z/ { print $0, 1 ; next }
  { print }
'

세 개의 임의 필드가 있는 행인 경우 다음을 사용하십시오.

awk '
  /PATTERN/ { f=1 }
  f && NF==3 { print $0, 1 ; next }
  { print }
'

관련 정보