(4 respuestas)
Cerrado hace 2 años.
Tengo una tabla de datos como la siguiente
abc 1 1 1
bcd 2 2 4
bcd 12 23 3
cde 3 5 5
cde 3 4 5
cde 14 2 25
Quiero la suma de valores en cada columna según las variables en la primera columna y el resultado deseado es el siguiente:
abc 1 1 1
bcd 14 25 7
cde 20 11 35
Usé un comando awk como este
awk -F"\t" '{for(n=2;n<=NF; ++n)a[$1]+=$n}END{for(i in a ) print i, a[i] }' tablefilepath
y obtuve un resultado a continuación:
abc 3
bcd 46
cde 66
Creo que el final de mi código está mal, pero no sé cómo solucionarlo.
Necesito algunas instrucciones para corregir el código.
Respuesta aceptada:
Estabas bastante cerca.
Ves lo que estabas haciendo mal, ¿no?
Estabas guardando un total para cada valor de columna 1,
cuando deberías haber estado guardando tres.
Esto es similar a la respuesta de Inian,
pero trivialmente extensible para manejar cualquier número de columnas:
awk -F"\t" '{for(n=2;n<=NF; ++n) a[$1][n]+=$n}
END {for(i in a) {
printf "%s", i
for (n=2; n<=4; ++n) printf "\t%s", a[i][n]
printf "\n"
}
}'
En lugar de mantener tres matrices, como la respuesta de Inian,
mantiene una matriz bidimensional.