awk getline não está funcionando como esperado na iteração do primeiro loop

1

Considere este programa simples de calculadora awk e sua saída

$ awk '{while (getline) {n=0;for(i=NF;i>0;i--)n+=$i; print "sum: " n;}}'
1 1
2 2
sum: 4
3 3
sum: 6

Observe como a primeira linha de entrada 1 1 não produz soma. Todas as linhas sucessivas funcionam conforme o esperado. Por que nenhuma soma é impressa para a primeira linha de entrada?

    
por Jonah 01.07.2014 / 07:10

1 resposta

4

O uso de getline joga fora a primeira linha. Tente em vez disso:

awk '{n=0;for(i=NF;i>0;i--)n+=$i; print "sum: " n;}'

Por sua natureza, awk irá iterar implicitamente sobre as linhas de entrada. Conseqüentemente, o código n=0;for(i=NF;i>0;i--)n+=$i; print "sum: " n; será executado para cada linha de entrada. Não há necessidade de fazer um loop explicitamente sobre as linhas.

    
por 01.07.2014 / 07:13

Tags