GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erhält man die Summe der Werte in einer Spalte basierend auf Variablen in einer anderen Spalte separat?

Für diese Frage gibt es hier bereits Antworten :Wie berechnet man die Summe der Daten, die in der ersten Spalte die gleiche ID haben?

(4 Antworten)
Vor 2 Jahren geschlossen.

Ich habe Tabellendaten wie unten

abc 1   1   1
bcd 2   2   4
bcd 12  23  3
cde 3   5   5
cde 3   4   5
cde 14  2   25

Ich möchte die Summe der Werte in jeder Spalte basierend auf Variablen in der ersten Spalte und das gewünschte Ergebnis ist wie folgt:

abc 1   1   1
bcd 14  25  7
cde 20  11  35

Ich habe den awk-Befehl so verwendet

awk -F"\t" '{for(n=2;n<=NF; ++n)a[$1]+=$n}END{for(i in a ) print i, a[i] }' tablefilepath

und ich habe ein Ergebnis unten:

abc 3
bcd 46
cde 66

Ich glaube, das Ende meines Codes ist falsch, aber ich weiß nicht, wie ich das beheben kann.
Ich brauche eine Anleitung, um den Code zu korrigieren.

Akzeptierte Antwort:

Du warst ziemlich nah dran.
Sie sehen, was Sie falsch gemacht haben, nicht wahr?
Sie haben für jeden Wert in Spalte 1 eine Summe behalten,
obwohl Sie drei hätten behalten sollen.

Dies ähnelt der Antwort von Inian,
ist aber trivial erweiterbar, um eine beliebige Anzahl von Spalten zu verarbeiten:

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"
             }
        }'

Anstatt drei Arrays beizubehalten, wie Inians Antwort
, behält es ein zweidimensionales Array bei.


Linux
  1. So erhalten Sie die CPU-Auslastung

  2. Wie kann ich eindeutige Werte aus einem Array in Bash erhalten?

  3. Wie bekomme ich ps zur Druckgruppe?

  4. Wie viele Umgebungsvariablen nicht gesetzt sind

  5. tcpdump:Wie bekomme ich eine grepable Ausgabe?

So verwenden Sie Variablen im Ansible Playbook

So erhalten Sie Informationen über andere Linux-Benutzer

So erhalten Sie Ihre IP-Adresse unter Linux

Wie bekomme ich die Uhr dazu, das Datum anzuzeigen?

Wie bekomme ich eine Liste von Verzeichnissen in einer ZIP-Datei?

Verwenden von awk zum Summieren der Werte einer Spalte basierend auf den Werten einer anderen Spalte