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'
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"?
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'
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 }
'
Tags awk