(4 risposte)
Chiuso 2 anni fa.
Ho una tabella di dati come di seguito
abc 1 1 1
bcd 2 2 4
bcd 12 23 3
cde 3 5 5
cde 3 4 5
cde 14 2 25
Voglio la somma dei valori in ogni colonna in base alle variabili nella prima colonna e il risultato desiderato è come di seguito:
abc 1 1 1
bcd 14 25 7
cde 20 11 35
Ho usato il comando awk in questo modo
awk -F"\t" '{for(n=2;n<=NF; ++n)a[$1]+=$n}END{for(i in a ) print i, a[i] }' tablefilepath
e ho ottenuto un risultato qui sotto:
abc 3
bcd 46
cde 66
Penso che la fine del mio codice sia sbagliata, ma non so come risolverlo.
Ho bisogno di alcune indicazioni per correggere il codice.
Risposta accettata:
Eri abbastanza vicino.
Vedi cosa stavi sbagliando, vero?
Stavi mantenendo un totale per ogni valore di colonna 1,
quando avresti dovuto tenerne tre.
È simile alla risposta di Inian,
ma banalmente estendibile per gestire un numero qualsiasi di colonne:
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"
}
}'
Invece di mantenere tre array, come la risposta di Inian,
mantiene un array bidimensionale.