GNU/Linux >> Znalost Linux >  >> Linux

Jak získat součet hodnot ve sloupci na základě proměnných v jiném sloupci samostatně?

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.

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.


Linux
  1. Jak získat součet Md5 obsahu adresáře jako jeden součet?

  2. Jak získat datový typ proměnných v Zsh?

  3. Jak zajistit, aby Uuencode fungoval?

  1. Jak získat velikost adresáře v Linuxu

  2. Jak získat ID procesu na pozadí?

  3. tcpdump:jak získat grepable výstup?

  1. Jak seřadit soubor na základě jeho číselných hodnot pro pole?

  2. Jak zjistit využití CPU

  3. Jak mohu získat jedinečné hodnoty z pole v Bash?