Portál AbcLinuxu, 6. května 2025 09:27

Dotaz: deleni, nasobeni, scitani v shellu bash

14.12.2004 23:08 Lubos | skóre: 3
deleni, nasobeni, scitani v shellu bash
Přečteno: 7441×
Odpovědět | Admin
Dobry den, nacitam retezec cislic pomoci tohoto zapisu:

rychlost=$(tail -1 /.../.../soubor | cut -f 1 -d ' ').

Byva to cislo formatu 54.82 a zde prave neumim pocetni operace. Prikaz c=`expr$w + 1 funguje jen pro w = cele cislo. c=$(($a*$b)) take nechodi (a, b jsou cisla typu 4.2 78.62). Neporadil by mi prosim nekdo, jak prevest retezec na "plnohodnotne cislo"? Diky za jakekoliv popostrceni. Lubos.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

14.12.2004 23:17 Maude Lebowski
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Odpovědět | | Sbalit | Link | Blokovat | Admin
Bash (a pravdepodobne i sostatni jiny shelly) neumi aritmetiku v plovouci carce. Cili to oc se pokousis nelze.

Doporucuju provadet tyhle veci pomoci awku: echo $rychlost1 $rychlost2 | awk '{print $1*$2}'
15.12.2004 02:00 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Bash (a pravdepodobne i sostatni jiny shelly) neumi aritmetiku v plovouci carce.

Samozřejmě až na zsh ;-)
% echo $((4.2*78.62))
330.20400000000001
 
% float a=4.2 b=78.62
% echo $((a*b))
330.20400000000001
15.12.2004 11:00 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Samozřejmě až na zsh ;-)
Samozřejmě záleží na tom, co člověk považuje za shell... takový python ;-)
15.12.2004 11:34 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Interaktivní interpret Pythonu nespouští příkazy [opračního systému]. Shell ano, to je jeho smysl. Šlo by to samozřejmě zařídit (pro Perl jsem nějaký takový hybrid i viděl), ale protože to normálně nedělá, tak to není shell.
egg avatar 14.12.2004 23:33 egg | skóre: 20 | Praha
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Odpovědět | | Sbalit | Link | Blokovat | Admin
egg@nest:~$ echo 'scale=3; 4/3'  | bc
1.333
Proč led klouže? --Aldebaran bulletin
egg avatar 15.12.2004 01:17 egg | skóre: 20 | Praha
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
A napadá mě ještě jedna odpověď. ;-)
echo '16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq'|dc
14.12.2004 23:36 Milan Gerža | skóre: 30
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Odpovědět | | Sbalit | Link | Blokovat | Admin
napr.:
echo 2.333*5 |bc
bc musi byt nainstalovan a v ceste
mezi cisly a operatorem by nemela byt mezera - aspon me to s ni nechodi, kdyz je z obou stran :-)
14.12.2004 23:39 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
man bash
echo "2.333*5" |bc
14.12.2004 23:42 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Ehm, pointa měla být, že s uvozovkami nebo apostrofem to funguje i s mezerama nebo se souborem 2.333tadydadyda5 v adresáři.
echo "2.333 * 5" | bc
15.12.2004 12:03 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jste si jist, že právě bash je pro váš účel ten nejvhodnější nástroj? Pokud váš program v drtivé většině kódu pouze nespouští jiné programy nebo příkazy bez kterých se neobejdete, zvažte použití nějakého opravdového programovacího jazyka. Raději si zjistěte, jak se v např. v Pythonu zachází se soubory než krkolomnými způsoby nutit shell k násobení dvou reálných čísel. Váš program, jak se zdá, pokaždé spustí tail, ten otevře soubor, najde jeho konec, vypíše poslední řádku, uzavře soubor, výstup se přesměruje do cut (ten se musí pokaždé znovu spustit), dále se bude pouštět bc nebo bůhvícoještě ... opravdu by to nešlo jednodušeji? Budete-li používat bash coby programovací jazyk, velmi brzy narazíte na jeho limitace, které se pak musí zoufalým způsobem obcházet (což už se vám stalo).
15.12.2004 13:40 Lubos | skóre: 3
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Odpovědět | | Sbalit | Link | Blokovat | Admin
diky vsem za pomoc. S tim programovanim zacinam, takze postupne narazim. Myslel jsem, ze to bude pro shell hracka :-) Diky.
30.6.2009 13:54 jikra
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Odpovědět | | Sbalit | Link | Blokovat | Admin
no, nevim proc, ale scale=0 mi u nasobeni a scitani (mozna i odcitani) vysledek nijak neupravi, takze jsem musel pouzit scale=0; 5454.5454/1 | bc a bych se zbavil desetiné čárky a zbytku, JIrka
30.6.2009 23:43 Ash | skóre: 53
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Když něco nevíte, položte vlastní dotaz, nevytahujte diskuzi z roku 2004 na světlo boží.

Úprava scale se týká u výsledků generovaných bc při operacích násobení a dělení, pokud zadáte vy osobně na vstup více míst, objeví se i na výstupu.
30.6.2009 23:51 Ash | skóre: 53
Rozbalit Rozbalit vše Re: deleni, nasobeni, scitani v shellu bash
Jo a je to proto, že bc je primárně určen pro počítání, ne pro pěkné formátování výstupů. Takže tam sice je možnost omezit počet desetinných míst, ale to tam být musí jako nutnost, protože všechna vypisovat nejde. U bc je výchozí hodnota 0 míst, u bc -l je to 20 míst. Pokud vy na vstupu zadáte 80 míst, asi jste masochista a tuto přesnost potřebujete, takže se i na výstupu. Howgh.

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.