for loop é executado de uma maneira estranha

3

Pergunta rápida: eu tenho que escrever um script simples e parte dele está adicionando todos os valores em uma coluna - > soma de cada coluna e tudo. Então, arquivo

1 2 5
1 2
1

deve retornar

column1: 3
column2: 4
column3: 5
sum: 12

Meu código é quase perfeito, mas as colunas não são exibidas em ordem crescente

if [[ $# -eq 0 ]]; then
  awk  '{ for (i=1;i<=NF;i++) sum[i]+=$i }; END { for (i in sum) print "column "i" : " sum[i];}' file.txt
  awk '{for(i=1;i<=NF;i++) sum+=$i;}; END {print "sum: " sum}' file.txt
fi

E a saída é:

➜  script ./sum.sh
column 2 : 4
column 3 : 5
column 1 : 3
sum: 12

Por que começa com a coluna 2?

    
por codddeer123 15.12.2016 / 17:45

1 resposta

2

for (variable in array) deve iterar, atribuindo cada índice de matriz à variável em uma ordem não especificada.

Solução

if [[ $# -eq 0 ]]; then
    awk '(NF>m){m=NF}{for(i=1;i<=NF;i++)sum[i]+=$i}END{for(i=1;i<=m;i++)print("column "i" : "sum[i])}' file.txt
    awk '{for(i=1;i<=NF;i++)sum+=$i}END{print("sum: "sum)}' file.txt
fi

Saída

column 1 : 3
column 2 : 4
column 3 : 5
sum: 12
    
por 15.12.2016 / 18:21

Tags