O loop em toda a soma da coluna usando pode ser feito no arquivo txt abaixo:
101 10
101 10
101 10.10
101 13
101 10
101 10
102 10.140
102 10
102 10
102 0.90
102 10
103 10
104 10
111 11
111 11
111 5.485e+12
111 11
awk '{sum+=$2;} END{print sum;}' file1.txt > sum_a.txt
Agora eu gostaria de fazer algo diferente. Por exemplo, gostaria de somar as segundas colunas até quando os números da primeira coluna forem iguais e começar tudo de novo. Isso pode ser feito usando visto[$1]?
awk '{ seen[$1] += $2 } END { for (i in seen) print i, seen[i] }' file1.txt
onde $1 sendo tratado como o valor do índice.
Não consegui fazê-lo funcionar usando seen[$1]
. Ou alguma outra maneira legal de fazer o loop?
O resultado seria assim:
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
102 40. 90
e assim por diante... até a coluna inteira.
Responder1
$ awk 'NR==FNR{sum[$1]+=$2; next} {print $1, sum[$1]}' file file
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
102 41.04
102 41.04
102 41.04
102 41.04
102 41.04
103 10
104 10
111 5485000000033
111 5485000000033
111 5485000000033
111 5485000000033
Responder2
Se quiser usar apenas um arquivo de entrada usando o awk:
$ awk -v c=1 '{ a[$1]+=$2;b[c]=$1;c+=1} END { for( i=1;i<=NR;i++ ){key=b[i]; print key" "a[key]} }' file1.txt
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
101 63.1
102 41.04
102 41.04
102 41.04
102 41.04
102 41.04
103 10
104 10
111 5485000000033
111 5485000000033
111 5485000000033
111 5485000000033