Cria um total corrente de uma lista de números no awk?

0

Eu preciso somar números como esse

Entrada 1 5 6 8 9 11

Saída 1 6 12 20 29 40

Ou seja: 1 1 + 5 1 + 5 + 6 1 + 5 + 6 + 8 1 + 5 + 6 + 8 + 9 1 + 5 + 6 + 8 + 9 + 11

    
por Victor Hernandez 17.02.2017 / 18:12

2 respostas

0

Em awk :

{
    for (i = 1; i <= NF; ++i) {
        printf("%d ", s += $i);
    }
    printf("\n");
}

O loop passa por todos os campos de entrada e imprime o total em execução ( s ) dos números. A variável s não precisa ser inicializada, pois seu valor será considerado zero na primeira iteração. O resultado da atribuição a s é o valor de s , que é então impresso com um caractere de espaço à direita.

Com a entrada de exemplo:

$ echo "1 5 6 8 9 11" | awk -f script.awk
1 6 12 20 29 40
    
por 17.02.2017 / 19:02
0

Aqui está uma maneira de usar o comando da calculadora "dc":

echo '1 5 6 8 9 11' |
dc -e "
[SM]sa               # macro a pushes TOS into stack M              
[dn32and]sp          # macro p prints current sum value
[z 1 <a SM z 0 <b]sb # macro b accumulates the main stack in stack M
[LM+lpx z lN !<c]sc  # macro c is while loop for showing running sum
? zsN lbx 0 lcx []p  # main() which brings together all macros
"
    
por 17.02.2017 / 19:23

Tags