パターンマッチング後の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'

関連情報