Portál AbcLinuxu, 24. dubna 2024 04:59


Dotaz: matematicka operace s promenou

27.6.2008 23:20 Kamil
matematicka operace s promenou
Přečteno: 357×
Odpovědět | Admin
Dobry den, pomoci tohoto scriptu
downa=$(
  export LC_ALL=C
  export LANG=C
  wget nejaky_soubor 2>&1 |
    sed -n 's/.*(\([^ ]*\).*saved.*/\1/;T;p'
)
ziskavam cislo vyjadrujici rychlost downloadu.Toto cislo je v rozmezi 2-1050 nebo v rozmezi 0-1.99 Potreboval bych napsat matemetickou operaci v bashi ktera by v pripade ze ten sed vyplivne vysledne cislo v rozsahu 2-1050 neudelala nic a v pripade ze ten sed vyplivne cislo v rozsahu 0-1.99 toto cislo vynasobil 1000.Dokazal by mi nekdo pomoci.Dekuji.
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.6.2008 23:59 Franta Hanzlik
Rozbalit Rozbalit vše Re: matematicka operace s promenou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi bych to řešil awk-em - pracuje s real čísly.
28.6.2008 00:01 diverman | skóre: 32 | blog: život s tučňáčkem
Rozbalit Rozbalit vše Re: matematicka operace s promenou
heh byl jsi rychlejsi :-D
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
28.6.2008 00:00 diverman | skóre: 32 | blog: život s tučňáčkem
Rozbalit Rozbalit vše Re: matematicka operace s promenou
Odpovědět | | Sbalit | Link | Blokovat | Admin
za ten sed dej jeste | awk '{ if($1>0 && $1<2) print $1*1000; }'
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
28.6.2008 10:45 Kamil
Rozbalit Rozbalit vše Re: matematicka operace s promenou
tohle mi po
downa=$(
  export LC_ALL=C
  export LANG=C
  wget http://schema.mistral.cz/speed/dwn.php?1000 2>&1 |
    sed -n 's/.*(\([^ ]*\).*saved.*/\1/;T;p'
)| awk '{ if($1>0 && $1<2) print $1*1000; }'
echo "$downa" 
nevzpise zadnou hodnotu.
28.6.2008 11:11 diverman | skóre: 32 | blog: život s tučňáčkem
Rozbalit Rozbalit vše Re: matematicka operace s promenou
necekal jsem, ze nepochopis, co jsem myslel tim 'za ten sed'.
downa=$(
  export LC_ALL=C
  export LANG=C
  wget nejaky_soubor 2>&1 |
    sed -n 's/.*(\([^ ]*\).*saved.*/\1/;T;p' | awk '{ if($1>0 && $1<2) print $1*1000; else print $1; }'
)
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
28.6.2008 00:11 ondrej | skóre: 7 | blog: zvast
Rozbalit Rozbalit vše Re: matematicka operace s promenou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tato funkcia by to mala zvladnut:
function test
{
    OIFS=$IFS
    IFS="."
    s=($1)
    left=${s[0]}
    right=${s[1]}
    IFS=$OIFS
    if [ $left -gt 1 ]; then
        :;
    else
        right=${right:0:2}
        (( left*=1000 ))
        (( right*=10 ))
        (( left+=right ))
        echo $left
    fi
}
Ale awk je praktickejsi
28.6.2008 00:21 Ash | skóre: 53
Rozbalit Rozbalit vše Re: matematicka operace s promenou
Odpovědět | | Sbalit | Link | Blokovat | Admin
downa=$(
  export LC_ALL=C
  export LANG=C
  wget nejaky_soubor 2>&1 |
    sed -n 's/.*(\([^ ]*\).*saved.*/\1/;T;p'
)

bc -l <<EOF
  downa = $downa
  if(downa < 2) downa * 1000 else downa
EOF
28.6.2008 10:41 Kamil
Rozbalit Rozbalit vše Re: matematicka operace s promenou
tothle mi funguje ale kdyz dam
echo "$downa"
tak mi vypise cislo ve tvaru treba 1.05 potreboval bych dostat tu vynasobenou hodnotu primo do nejake promene abych ji potom mohl dale pouzit
28.6.2008 11:56 Ash | skóre: 53
Rozbalit Rozbalit vše Re: matematicka operace s promenou
No ale to už přece umíte ;)
downb=$(bc -l <<EOF
  downa = $downa
  if(downa < 2) downa * 1000 else downa
EOF)

echo $downb
28.6.2008 11:58 Ash | skóre: 53
Rozbalit Rozbalit vše Re: matematicka operace s promenou
Pokud jde o bash, jde to i ještě zkrátit.
downb=$(bc -l <<<"if($downa < 2) $downa * 1000 else $downa")
Fuky avatar 28.6.2008 00:26 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: matematicka operace s promenou
Odpovědět | | Sbalit | Link | Blokovat | Admin

Nejpohodlnější bude asi použítí bc:

echo "

      number=$downa

      if ((number >= 2) && (number <= 1050)) {
          print number
      }
      if ((number >= 0) && (number <= 1.99)) {
          print number * 1000
      }

" |bc -l

-- RÁMO: psí tábor , ETriatlon: Výuka plavání
29.6.2008 11:02 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: matematicka operace s promenou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Než parsovat jakýsi zformátovaný výstup, tak bych raději stáhl data a podělil jejich délku časem, který uplynul:
#!/usr/bin/python
import urllib2, time
url = 'http://abclinuxu.cz'
response = urllib2.urlopen(url)
stamp = time.time()
data = response.read()
print len(data)/(time.time() - stamp)
Ani jsem se neobtěžoval to číst po kouskách – píšeš, že délka bude max. dva kilobajty.

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.