Realizar un bucle hasta un número diferente y comenzar a realizar el bucle nuevamente (Awk/Bash)

Realizar un bucle hasta un número diferente y comenzar a realizar el bucle nuevamente (Awk/Bash)

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

información relacionada