Portál AbcLinuxu, 5. května 2025 21:42

Dotaz: Zpracování dat z tabulky pomocí awk

21.5.2020 09:23 Lukas48
Zpracování dat z tabulky pomocí awk
Přečteno: 284×
Odpovědět | Admin
Ahoj, prosím o pomoc. Potřebuji udělat script, který mi bude počítat průměrnou hodnotu z čísel uvedené ve sloupci tabulky.

př. tab

a aa 1 aaa b bb 2 bbb c cc 3 ccc d dd 4 ddd

-> tabulka je umístěna v txt souboru. Potřebuji sloupec s čísly postupně načíst do proměnné a následně sečíst. To jsem chtěl provést pomocí cyklu, kde nejdříve zjistím kolik položek v souboru je (pocet) a následné bych chtěl projít tento sloupec jako pole a postupně načítat jednotlivé položky do proměnné (suma). A potom udělat průměr. Jenže problém je v načtení dat ze souboru - hlásí mi to "command not found" Mužete mi prosím někdo pomoct? Předem děkuju

#!/bin/sh

pocet=$(awk {$3} data.txt) for(i=0 ; $i<=$pocet ; $i++) do x= awk /$i/ {$3} data.txt suma= $($suma + $x)

#-------nebo takhle ale tohle taky nefunguje--------- suma=$($suma + $(awk '/$i/ {$3}' data.txt))

done prumer=$($suma / $pocet) echo prumer

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.5.2020 09:48 Lukas48
Rozbalit Rozbalit vše Re: Zpracování dat z tabulky pomocí awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příloha:

sorry, ale to formatování...napíšu to znova

př. tab

 

a b 1 d
a b 2 d
a b 3

d

a b 4 d
21.5.2020 09:58 drnest | skóre: 13 | blog: Dřinu nechte strojům
Rozbalit Rozbalit vše Re: Zpracování dat z tabulky pomocí awk
Má to být úplně jinak. Řekněme, že tě zajímá třetí sloupeček:
{
    soucet=soucet+$3
    i++
    # print i, soucet # odkomentuj zacatek, abys videl jak to nacita
}

END {
    print soucet/i
}
21.5.2020 10:00 drnest | skóre: 13 | blog: Dřinu nechte strojům
Rozbalit Rozbalit vše Re: Zpracování dat z tabulky pomocí awk
Ten prográmek uložíš jako tab.awk, data máš v tab.txt a spustíš to: awk -f tab.awk tab.txt
21.5.2020 18:42 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Zpracování dat z tabulky pomocí awk

Jakou výhodu má mít to i ve srovnání s NR?

21.5.2020 10:22 debian+
Rozbalit Rozbalit vše Re: Zpracování dat z tabulky pomocí awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ak iba cisiel:
echo "a 3 b z 7 8" | tr " " "\n"| awk 'BEGIN { sum=0; count=0} /([0-9])/ {sum = sum + $1 ; (count++) } END { print sum / count }'
Ak len priemer stlpcov:
 echo -e "a 3 b z 7 8\na 5 b z 9 10" | awk 'BEGIN { sumA=sumB=sumC=count=0} /([0-9])/ {sumA = sumA + $2 ; sumB = sumB + $5 ;sumC = sumC + $6 ; (count++) } END { print sumA / count " " sumB / count " " sumC / count}'
21.5.2020 18:39 pavele
Rozbalit Rozbalit vše Re: Zpracování dat z tabulky pomocí awk
Jinak bacha na locales.

Nevím, jestli je to ještě dnes pravda, ale pro počítání s desetinnou čárkou jsem kdysi musel použít parametr "--use-lc-numeric".

Taky existuje mawk, který je pro počítání většího množství dat mnohem rychlejší.
21.5.2020 10:23 debian+
Rozbalit Rozbalit vše Re: Zpracování dat z tabulky pomocí awk
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ak iba cisiel:
echo "a 3 b z 7 8" | tr " " "\n"| awk 'BEGIN { sum=0; count=0} /([0-9])/ {sum = sum + $1 ; (count++) } END { print sum / count }'
Ak len priemer stlpcov (tu netreba /([0-9])/):
 echo -e "a 3 b z 7 8\na 5 b z 9 10" | awk 'BEGIN { sumA=sumB=sumC=count=0} {sumA = sumA + $2 ; sumB = sumB + $5 ;sumC = sumC + $6 ; (count++) } END { print sumA / count " " sumB / count " " sumC / count}'
21.5.2020 18:40 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Zpracování dat z tabulky pomocí awk
Odpovědět | | Sbalit | Link | Blokovat | Admin

Šmarja! Tady v tom vlákně je normálně úplně nablito! :-D

awk '{sum += $3} END {print sum / NR}' < data.txt

(Pokud by náhodou hrozilo, že součet čísel překročí nějaké obrovské číslo (třeba 64-bitové, 18446744073709551616, byť konkrétní limit není rozumně definovaný a pojí se s ním bug), dá se AWK pomocí -M říct, aby používalo GNU GMP, tedy neomezená čísla.)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.