awk substituir coluna específica em linha específica

2

Meu arquivo de dados é

sdfsdfsdf
1 0.5000 0.5000 0.5000 8 7 90 135  90 135 1 
2 0.5000 0.5000 0.0000 8 7 90 -45  90 -45 1 
3 0.0000 0.5000 0.5000 8 7 90 225  90 225 1 
4 0.5000 0.0000 0.5000 8 7 90 45   90 45  1 
sdfsdfsdf
sdfsdfsdfsdfsdfsdfsdf

e quero alterar a 7ª e a 9ª coluna de 2 a 5 linhas, para que o resultado pareça

sdfsdfsdf
1 0.5000 0.5000 0.5000 8 7 60 135  60 135 1 
2 0.5000 0.5000 0.0000 8 7 60 -45  60 -45 1 
3 0.0000 0.5000 0.5000 8 7 60 225  60 225 1 
4 0.5000 0.0000 0.5000 8 7 60 45   60 45  1 
sdfsdfsdf
sdfsdfsdfsdfsdfsdfsdf

Como faço isso com sed ou awk? Eu tentei

awk 'NR>=2&&NR<=5{$7="60"}' input.dat > tmp && mv tmp input.dat

mas isso não funciona

    
por user42298 16.05.2015 / 14:13

2 respostas

1

Tente:

awk 'FNR==2,FNR==5{$7=$9=60};1' input.dat > tmp
    
por 16.05.2015 / 14:19
0

Modifique seu script desta maneira:

awk '{if (NR>=2&&NR<=5) $7=60; print}' input.dat > tmp && mv tmp input.dat

O problema que você observa em sua variante é porque sem a cláusula de impressão explícita awk imprimirá a linha de entrada

    
por 16.05.2015 / 14:19

Tags