Se puede recorrer toda la suma de la columna usando esto en el siguiente archivo de texto:
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
Ahora me gustaría hacer algo diferente. Por ejemplo, me gustaría sumar las segundas columnas hasta que los números de la primera columna sean iguales y empezar de nuevo. ¿Se puede hacer usando visto[$1]?
awk '{ seen[$1] += $2 } END { for (i in seen) print i, seen[i] }' file1.txt
donde $1 se trata como el valor del índice.
No pude hacerlo funcionar usando seen[$1]
. ¿O alguna otra buena forma de hacer el bucle?
El resultado sería así:
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
101 63.10
102 40. 90
y así sucesivamente... hasta toda la columna.
Respuesta1
$ 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
Respuesta2
Si solo desea utilizar un solo archivo de entrada usando 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