GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere la somma dei valori nella colonna in base alle variabili in un'altra colonna separatamente??

Questa domanda ha già risposte qui :Come calcolare la somma dei dati che hanno lo stesso ID nella prima colonna?

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


Linux
  1. Come ottenere la dimensione della directory in Linux

  2. Come ottenere l'ID processo del processo in background?

  3. Come posso ottenere valori univoci da un array in Bash?

  4. Come usare le variabili atomiche in C?

  5. Come annullare l'impostazione di molte variabili d'ambiente

Come utilizzare le variabili in Ansible Playbook

Come ottenere informazioni su altri utenti Linux

Come ottenere il tuo indirizzo IP su Linux

Come ottenere l'orologio per mostrare la data?

Come ottenere un elenco di directory in una zip?

tcpdump:come ottenere un output grepable?