Acrescentar com base na contagem de linhas no awk após a correspondência de padrões

0

Como posso acrescentar linhas após uma correspondência de padrões no awk com base em quantas linhas elas estão após a correspondência do padrão.

O que eu tenho é assim:

Stuff
PATTERN
a b c
a b c
a b c
ENDOFSECTION
Morestuff

Eu gostaria de acrescentar várias coisas ao final das linhas mostradas como "a b c" (sem saber o que a b c é especificamente, ou seja, elas são arbitrárias).

Saída desejada:

Stuff
PATTERN
a b c   k
a b c   k
a b c   t
ENDOFSECTION
Morestuff

Acho que isso exigirá algum tipo de loop que conte as linhas depois que o padrão for reconhecido. Meu problema é que não sei como vincular a contagem de linhas à variável após uma pesquisa de padrão.

Minha idéia muito difícil até agora (que não funciona):

awk '/PATTERN/ {
i=1
Do
{print $0, "   k"
i++
} while (i<=2)
}
    
por Christopher 09.03.2015 / 18:22

3 respostas

3
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

O bloco BEGIN é um exemplo de como criar um array de coisas novas para adicionar.

Em seguida, o programa awk age como uma máquina de estado, configurando / desativando um sinalizador quando determinados padrões são vistos.

    
por 09.03.2015 / 18:48
2

Com base no que foi esclarecido até agora ...

awk '
    BEGIN { a="ktp" }
    /ENDOFSECTION/ { f=0 }
    f { $0=$0 "   " substr(a,++c,1) }
    /PATTERN/ { f=1 }
    { print }
'
    
por 09.03.2015 / 19:01
1
awk '
/PATTERN/,/ENDOFSECTION/{
    if(/PATTERN/){
        i=0
        print
        next
    }
    if(!/ENDOFSECTION/){
        ++i
        if(i<3)
            $(NF+1)="\tk"
        else
            $(NF+1)="\tt"
    }
}
1'
    
por 09.03.2015 / 18:43