如何根据模式匹配后的行数在 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'