Portál AbcLinuxu, 8. května 2025 07:02

Dotaz: Zobrazení posledního znaku různě dlouhé proměnné

7.2.2016 12:25 Pavel
Zobrazení posledního znaku různě dlouhé proměnné
Přečteno: 414×
Odpovědět | Admin
Zdravím. Chtěl bych se zeptat na to jak zobrazit poslední znak proměnné. Potřebuji totiž provádět dělení v bash a mít zobrazeno jedno desetinné místo.

Příkaz bc použít nemohu, xbmc ho nezná. Na webu jsem našel možnost, že dělím o řád menším číslem a potom ve výsledku poslední číslici oddělím desetinnou čárkou.

a=((500/3));echo ${a%?},${a: -1}

Tento zápis funguje v Puppy, ale nikoliv v xbmc. Tam v té části ${a: -2} mi to napíše syntax error.

Potřebuji za tou desetinnou čárkou zobrazit poslední číslici-znak z proměnné.

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

Odpovědi

Jendа avatar 7.2.2016 12:40 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné
Odpovědět | | Sbalit | Link | Blokovat | Admin
V příkladu ti chybí dolar a=$((500/3));echo ${a%?},${a: -1}.

Tipuju, že v xbmc je jako shell Dash, který tuhle funkci nemá, nebo dokonce jenom busybox shell.

Není to jenom tajné Ubuntu, že by to tam šlo doinstalovat?

Do rozbitých systémů doinstalovávám do chrootu Debian.

Taky by to šlo obejít pomocí a=$((500/3));echo ${a%?},`echo $a | rev | cut -c 1`
7.2.2016 13:01 Pavel
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné
Díky, ten dolar jsem zapomněl napsat do fóra, ale na xbmc byl.

Zkoušel jsem to od tebe, ale

vypíše mi to ty příkazy ne výsledek. Je to v apostrofech, neměly by tam být nějaké závorky?

Jinak na xbmc nic doinstalovávat nechci (ani nevím jak), tohle potřebuji jen ke svému malému scriptíku.

7.2.2016 12:47 sdddd
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus si zjistit, jaký shell je v xmbc. Řekl bych, že tam nebude bash, ale spíše dash. Pak se mrkni do manuálu nalezeného shellu, jaké jsou možnosti expanze proměnných. Konstrukce typu ${a:-1} bych řekl, že je specifická pro bash (otestovat na puppy to můžeš zavoláním dash).

Možností jak to řešit je několik. Pokud máš štěstí, pak je na xmbc sed a nebo awk a jsi za vodou. Pokud ne, nebude potřeba si hrát s ${a%.} a printf.
7.2.2016 13:04 Pavel
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné
Sed tam je i awk, používám to ve scriptech.

Nevíš jak to přesně napsat, aby to bylo na jedné řádce a oddělené desetinnou čárkou?

7.2.2016 13:53 Pavel
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné
Už to funguje pomocí sed, ale používám pomocné soubory .txt, ze kterých načítám první a druhý řádek. Ve výsledku jsou potom zobrazeny s desetinnou čárkou mezi nimi.

a=$((500/3));echo ${a%?} > "/storage/Vypis1.txt"; echo $a > "/storage/Vypis2.txt";cat "/storage/Vypis2.txt" | tail -c 2 > "/storage/Vypis1.txt"

echo $(sed -n "1p" '/storage/Vypis1.txt'),$(sed -n "2p" '/storage/Vypis1.txt')

Nedalo by se trochu zjednodušit aby tam nemusely být ty soubory .txt??

8.2.2016 09:05 deadmail
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné
Na doplnenie znaku je mozne pouzit nahradenie SEDom:
echo $a | sed -r 's/^(.*)(.)$/\1,\2/'
8.2.2016 12:02 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné
Odpovědět | | Sbalit | Link | Blokovat | Admin

Máte nějaký důvod simulovat aritmetické operace pomocí řetězcových? Jinak by stačilo prostě

  a=$[500 / 3]
  echo "$[a / 10].$[a % 10]"
8.2.2016 13:22 Pavel
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné
Důvod je ten, že

1) nemám potřebné znalosti

2) ne všechno v xbmc funguje jako třeba v puppy

Ten výraz echo $a | sed -r 's/^(.*)(.)$/\1,\2/' funguje a dostanu výsledek 16,6 v xbmc, u toho posledního příspěvku funguje pouze v puppy, v xbmc dostanu $[a / 10].$[a % 10]

8.2.2016 14:37 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné

Jestli vám funguje aritmetická expanze s tou $((...)) syntaxí na "500 / 3", měla by fungovat i na to druhé dělení. Přinejhorším by asi mělo projít

  echo $(($a / 10)).$(($a % 10))
9.2.2016 11:47 Pavel
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné
Díky za odpovědi.

Bohužel ani tento výraz

echo $(($a / 10)).$(($a % 10))

v xbmc nefunguje, v puppy ano.

Snažil jsem se níže uvedený výraz změnit z přesnosti z desetiny na setiny, ale nejsem toho schopen.

echo $a | sed -r 's/^(.*)(.)$/\1,\2/' je přesnost na desetiny

Jestli by to sem někdo mohl napsat, byl bych moc rád.Díky.

10.2.2016 07:06 Pavel
Rozbalit Rozbalit vše Re: Zobrazení posledního znaku různě dlouhé proměnné
Podařilo se mi to vyřešit metodou pokus omyl.

Kolik je v kulaté závorce teček, tolik je desetinných míst

a=$((5139125898754/456879));echo $a | sed -r 's/^(.*)(...)$/\1,\2/' tři desetinná místa

a=$((5139125898754/456879));echo $a | sed -r 's/^(.*)(....)$/\1,\2/' čtyři desetinná místa

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.