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