模式匹配后根据 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'

相关内容