다음 형식의 "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 }
'