패턴 매칭 후 awk의 줄 수에 따라 추가

패턴 매칭 후 awk의 줄 수에 따라 추가

패턴 일치 후 행 수를 기반으로 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'

관련 정보