(4 réponses)
Fermé il y a 2 ans.
J'ai un tableau de données comme ci-dessous
abc 1 1 1
bcd 2 2 4
bcd 12 23 3
cde 3 5 5
cde 3 4 5
cde 14 2 25
Je veux la somme des valeurs dans chaque colonne en fonction des variables de la première colonne et le résultat souhaité est comme ci-dessous :
abc 1 1 1
bcd 14 25 7
cde 20 11 35
J'ai utilisé la commande awk comme celle-ci
awk -F"\t" '{for(n=2;n<=NF; ++n)a[$1]+=$n}END{for(i in a ) print i, a[i] }' tablefilepath
et j'ai obtenu un résultat ci-dessous :
abc 3
bcd 46
cde 66
Je pense que la fin de mon code est erronée mais je ne sais pas comment y remédier.
J'ai besoin de quelques instructions pour corriger le code.
Réponse acceptée :
Vous étiez assez proche.
Vous voyez ce que vous faisiez de mal, n'est-ce pas ?
Vous gardiez un total pour chaque valeur de colonne 1,
alors que vous auriez dû en garder trois.
Ceci est similaire à la réponse d'Inian,
mais trivialement extensible pour gérer n'importe quel nombre de colonnes :
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"
}
}'
Plutôt que de conserver trois tableaux, comme la réponse d'Inian,
il conserve un tableau à deux dimensions.