(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.