Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Kony.cz 20 Března 2018, 15:08:58
-
Hoj, mam ve scriptu číslo např. 4567821 a potreboval bych ho zaokrouhlit smerem nahoru na to aby číslo koncilo 0 tzn 4567830 a zase třeba další číslo 876229 zase na číslo 876230.
Lze toto nejak uskutečnit ?? Zkousim prikaz Round , ale zatím jsem všude nasel jen zaokrouhlovani na cela cisla z desetinych
A nebo by stacilo aby se posledni cislo zmenilo na 0
-
Skusal si vydelit ho 10-timi, bc nevie bezne pocitat s desatinnou ciarkou tak vsetko za nou odstrani a pripocitat 1?
echo "(456721/10)+1"|bc
-
tohle ale zmeni to cislo
echo "(456721/10)+1"|bc
vysledek je
45673
ja bych potreboval aby vysledek byl 456720 a nebo 456730
-
tohle je ale tupy .. v bashi to delat je hloupost
> for x in `seq 1 10`; do ./test ; done
28571
28570
2732
2730
9770
9770
11647
11650
26612
26610
10891
10890
12930
12930
5569
5570
11787
11790
11577
11580
> cat test
## random number
foo=$RANDOM;
## modulo from division by 10
foo_m=$((foo % 10));
## print original number
echo $foo;
## round up if modulo is greater than 5
if [ $foo_m -gt 5 ]; then
echo $((foo - foo_m + 10));
## otherwise round down
else
echo $((foo - foo_m));
fi
-
Uloz to cislo do premennej a potom k tomu cislu pridaj 0.
cislo=$(echo "456721/10"|bc);echo "$cislo""0"
:D
cislo=$(date +"%H%M%S"|bc);echo "$cislo""0"
-
zkousim tohle
cislo=$(date +"%H%M%S"|bc);echo "$cislo""0"
to vypise cas vcetne sekund a prida k tomu 0, takze
vysledek
17h47m180s
-
zkousim tohle
cislo=$(date +"%H%M%S"|bc);echo "$cislo""0"
to vypise cas vcetne sekund a prida k tomu 0, takze
vysledek
17h47m180s
napsal jsem ti reseni, co chces vic ... dokonce tri reseni
a) jak zaokrouhlovat spravne
b) jak zaokrouhlovat nahoru
c) jak zaokrouhlovat dolu
to co napsal tibor je absolutni nesmysl, protoze
n == n|bc
-
aha... no nejak jsem to nepobral :))) musim to projit
PS: No tak to nemam vubec tuseni jak to pouzit
-
Jaj, ja som tam nedal to /10.
-
ale ani tak mi to nechce fungovat
-
Co mas za os a verziu? Ja mam ubuntu mate a vysledok mam
cislo=$(date +"%H%M%S"/10|bc);echo "$cislo""0"
181440
-
mam ubuntu 16.04
#!/bin/bash
cislo=$(date +"%H%M%S / 10"|bc);echo "$cislo""0"
echo $cislo
a vysledek
181820
18182
PS: blbec jsem tam mel to echo , ted jsem si toho vsiml
PSS: takze to funguje.. a ted kdybych chtel k tomu cislu pricist 10 nebo 20 nebo 30 ??
Takto to nejde
cislo=$(date +"%H%M%S / 10"|bc);echo "$cislo""0"
deset="$cislo + 10" | bc
cat $cislo
PS: Tak uz fakt nevim..
Potrebuji mit nekolik udaju, kde bude pravidlo
aktualni cas s nulou nakonci
aktualni cas + 10
aktualni cas + 20
aktualni cas + 30
aktualni cas + 40
aktualni cas + 50
aby vysledek vypadal
aktualni cas = 18:52
vystup do promennych
aktualni=185200
aktualni_10=185210
aktualni_20=185220
aktualni_30=185230
aktualni_40=185240
aktualni_50=185250
-
## random number
foo=$RANDOM;
## modulo from division by 10
foo_m=$((foo % 10));
## print original number
echo $foo;
## round up if modulo is greater than 5
if [ $foo_m -gt 5 ]; then
echo $((foo - foo_m + 10));
## otherwise round down
else
echo $((foo - foo_m));
fi
napsal jsem ti reseni !!!! co chces vic ... proste to uloz do souboru a pust
-
## random number
foo=$RANDOM;
## modulo from division by 10
foo_m=$((foo % 10));
## print original number
echo $foo;
## round up if modulo is greater than 5
if [ $foo_m -gt 5 ]; then
echo $((foo - foo_m + 10));
## otherwise round down
else
echo $((foo - foo_m));
fi
sudo ./test2.sh
0
-
No a co to udělat úplně jednoduše, vzhledem k tomu, že Bash ignoruje desetinná místa:
cislo=$(date +"%H%M%S");echo $(((cislo/10+1)*10))
přičemž jedničku zaměníš za jiné číslo, podle toho, kolik desítek chceš přidat
Edit: nebo ještě jednodušeji:
cislo=$(date +"%H%M%S");echo $((cislo/10*10+10))
-
193500
193510
193520
193530
193540
193550
ale potom to pokracuje
193520
193530
193540
193550
193560
193570
193530
193540
193550
193560
193570
193580
193530
193540
193550
193560
193570
193580
coz je spatny... potrebuji aby vzdycky byl doplnena hodina a minuta a sekundy vzdy byli stejny 00,10,20,30,40,50... a takto porad dokola....
uplne staci aby se do promenny zapsala hodina+minuta a knim se doplnili 00,10,20,30,40,50.. a potom jak se minuta zvedne o jednu tak zase doplnit...
-
Ano, to bez modula nepůjde ;)
-
pro kristovy rany :D ... proc se sudem, co to tam s tim vyvadis, moje reseni je priklad kde demonstruju zaokrouhleni na nahodne vygenerovanem cisle:
vytiskne to nejdriv nahodne vygenerovane cislo a potom jak ho to zaokrouhli na desitky:
> ./test
29548
29550
> ./test
30731
30730
> ./test
866
870
> ./test
31701
31700
> ./test
9430
9430
kdyz si to prectes, tak vidis, ze tam jsou 3 metody !!!! metoda jedna je zaokrouhleni dolu
> foo=$RANDOM; echo $foo; echo $((foo - (foo % 10)))
6582
6580
metoda #2 je zaokrouhleni nahoru:
> foo=$RANDOM; echo $foo; echo $((foo + 10 - (foo % 10)))
30771
30780
a tedka schvalne ... ma to jednu lehce resitelnou chybicku pri zaokrouhlovani nahoru .. je to jen logicka uvaha, pokud vstupni cislo konci 0, tak to vlastne 10 pricte, jak to elegantne vyresesis ?
-
Ja len doplnim k tomu mojmu. S BASH asi este nemas vela skusenosti. Ten moj prikaz su dva riadky zapisane do jednoho riadku. Prvy prikaz je po znak ; a to co je za nim je dalsi prikaz, cize do premennej ukladas iba to co je po znak ; . Je to preto ze to spustam cez terminal, ak by som to pisal do suboru bolo by to takto
#!/bin/bash
cislo=$(date +"%H%M%S / 10"|bc)
echo "$cislo""0"
Cize ak chces pocitat dalej s vysledkom musi si ulozit vysledok do premennej, napr.
cislo_po_uprave=$(echo "$cislo""0")
-
takze jsem to vyresil takto :
cas=$(date +"%Y%m%d"_"%H%M")
nul=$cas'00'
dese=$cas'10'
dvace=$cas'20'
trice=$cas'30'
ctyrice=$cas'40'
padesa=$cas'50'
ale jeste bych potreboval abych k promenne $cas pripocetl na konec 1 (tim vlastne posunu cas o jednu minutu dopredu)
zkousim to :
sedesa=($cas+1)
nebo
sedesa=($cas+1)|bc
ale to samozrejme nejde
tak mam to :
cas2=$(date +"%H%M" -d '5 minutes')
-
No a co to udělat úplně jednoduše, vzhledem k tomu, že Bash ignoruje desetinná místa:
cislo=$(date +"%H%M%S");echo $(((cislo/10+1)*10))
přičemž jedničku zaměníš za jiné číslo, podle toho, kolik desítek chceš přidat
Edit: nebo ještě jednodušeji:
cislo=$(date +"%H%M%S");echo $((cislo/10*10+10))
ano presne tak napriklad !!!!!
ale myslim, ze chlapci chteji lstive opravdu neco neobycejneho .. GdH, tvy reseni je elegantni, ale chybi mu takova ta `tadáááá' velkolepost
-
foo=${RANDOM}0; echo $foo; echo $(((foo+9-((foo+9)%10))))
198110
198110
> foo=${RANDOM}; echo $foo; echo $(((foo+9-((foo+9)%10))))
17551
17560
druhe reseni
> foo=${RANDOM}0; echo $foo; echo $(((foo + 9)/10*10))
43100
43100
> foo=${RANDOM}; echo $foo; echo $(((foo + 9)/10*10))
14609
14610