Acrescentando um arquivo de entrada com o awk após um padrão (loop?)

1

Estou tentando pegar um arquivo de texto chamado 'entrada', no formato

line1 
line2
line3
PATTERN
x y z
x y z
lineN

e use o awk para colocar um número (1) após cada linha "xyz". Eu preciso das linhas antes do PADRÃO e depois das linhas "xyz" (lineN) na saída. A saída que eu preciso é assim:

line1
line2
line3
PATTERN
x y z   1 
x y z   1
lineN

O que eu tenho até agora é:

awk '/PATTERN/ {getline; print $0 "   1" }' < input > output 

Isso dá:

x y z   1

É possível configurar um loop para obter o awk para acrescentar um número arbitrário de linhas "xyz" ou parar após o término das linhas do tipo "xyz"?

    
por Christopher 04.03.2015 / 12:04

2 respostas

1

O loop pode ajudar:

awk '/PATTERN/{print;getline;while(!/lineN/){$(NF+1)="  1";print;getline}}1'

Ou para estender ideia do Janis :

awk '/lineN/{f=0}f{$(NF+1)="  1"}/PATTERN/{f=1}1'
    
por 04.03.2015 / 12:23
1

Você está dizendo que apenas as linhas literais "x y z" após PATTERN serão substituídas.

awk '
  /PATTERN/ { f=1 }
  f && /x y z/ { print $0, 1 ; next }
  { print }
'

Se são linhas com três campos arbitrários, use

awk '
  /PATTERN/ { f=1 }
  f && NF==3 { print $0, 1 ; next }
  { print }
'
    
por 04.03.2015 / 12:25

Tags