パターンマッチング後の行数に基づいて 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'