패턴 일치 후 행 수를 기반으로 awk에서 패턴 일치 후 행을 추가하는 방법.
내가 가진 것은 다음과 같습니다.
Stuff
PATTERN
a b c
a b c
a b c
ENDOFSECTION
Morestuff
"ab c"라는 줄 끝에 다양한 항목을 추가하고 싶습니다(abc가 정확히 무엇인지는 확실하지 않습니다. 즉 임의적입니다).
원하는 출력:
Stuff
PATTERN
a b c k
a b c k
a b c t
ENDOFSECTION
Morestuff
패턴을 식별한 후 행 수를 계산하려면 일종의 루프가 필요하다고 생각합니다. 내 문제는 패턴 검색 후 행 개수를 변수에 연결하는 방법을 모른다는 것입니다.
지금까지 내 대략적인 아이디어는 작동하지 않습니다.
awk '/PATTERN/ {
i=1
Do
{print $0, " k"
i++
} while (i<=2)
}
답변1
awk '
BEGIN {split("ABCDEFGH", new, "")}
/ENDOFSECTION/ {addcol=0}
addcol {$(++NF) = new[++i]}
/PATTERN/ {addcol=1; i=0}
{print}
' file
Stuff
PATTERN
a b c A
a b c B
a b c C
ENDOFSECTION
Morestuff
BEGIN 블록은 추가할 새 콘텐츠의 배열을 만드는 방법의 예입니다.
그런 다음 awk 프로그램은 상태 머신처럼 작동하여 특정 패턴을 볼 때 플래그를 설정/설정 해제합니다.
답변2
지금까지 밝혀진 내용을 토대로…
awk '
BEGIN { a="ktp" }
/ENDOFSECTION/ { f=0 }
f { $0=$0 " " substr(a,++c,1) }
/PATTERN/ { f=1 }
{ print }
'
답변3
awk '
/PATTERN/,/ENDOFSECTION/{
if(/PATTERN/){
i=0
print
next
}
if(!/ENDOFSECTION/){
++i
if(i<3)
$(NF+1)="\tk"
else
$(NF+1)="\tt"
}
}
1'