Tato otázka zde již obsahuje odpovědi :Jak vypočítat součet dat, která mají v prvním sloupci stejné ID?
(4 odpovědi)
Uzavřeno před 2 lety.
Linux
(4 odpovědi)
Uzavřeno před 2 lety.
Mám data tabulky jako níže
abc 1 1 1
bcd 2 2 4
bcd 12 23 3
cde 3 5 5
cde 3 4 5
cde 14 2 25
Chci součet hodnot v každém sloupci na základě proměnných v prvním sloupci a požadovaný výsledek je jako níže:
abc 1 1 1
bcd 14 25 7
cde 20 11 35
Použil jsem příkaz awk takto
awk -F"\t" '{for(n=2;n<=NF; ++n)a[$1]+=$n}END{for(i in a ) print i, a[i] }' tablefilepath
a mám výsledek níže:
abc 3
bcd 46
cde 66
Myslím, že konec mého kódu je špatný, ale nevím, jak to opravit.
Potřebuji nějaké pokyny, jak kód opravit.
Přijatá odpověď:
Byli jste docela blízko.
Vidíš, co jsi dělal špatně, že?
Ponechali jste jeden součet pro každou hodnotu sloupce 1,
když jste měli ponechat tři.
Toto je podobné Inianově odpovědi,
ale je triviálně rozšiřitelné, aby zvládlo libovolný počet sloupců:
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"
}
}'
Spíše než zachovat tři pole, jako je Inianova odpověď,
zachová dvourozměrné pole.