[bglug] dvd-slideshow: printf da errore un computer si ed uno no

Gian Paolo Ghilardi gpghilardi@gmail.com
Gio 29 Maggio 2008 22:37:21 CEST


Il giorno 29/mag/08, alle ore 21:21, Jimmi ha scritto:

>> dario.anzani@cheapnet.it ha scritto:
>> Perverso comunque usare la shell per fare ste' cose, IMHO....
>
> Se funzionasse perchè no? Se già trovi programmi che fanno bene le  
> cose
> una alla volta, è meglio cucirle assieme :)
>
>> 1) sostituendo manualmente tutte le occorrenze di funzioni
>> internazionalizzate
>> (ad esempio printf) con i separatori e/o caratteri speciali da  
>> inglesi a
>> italiani - metodo lungo e poco efficace
>
> non comprendo bene, nel caso di una riga come questa (n. 5415):
> x1_dec=`printf %3.3f "$x1" | awk -F. '{print "0."$2}'`;


Sembra un modo alquanto "eclettico" per prendere un numero decimale  
(formato: solo 3 cifre per le unità e 3 per i decimali) e stampare  
solo la parte dopo lo 0 (ossia 0 + la parte decomale di $x1).
Cioè dato un numero tipo 123.456 il risultato dovrebbe essere 0.456.

Il problema è che la shell si rifiuta di trattare numeri decimali come  
appunto 123.456, mentre non ha problemi con l'intero 123.

Per capirci:

Wintermute:~ jp80$ x1=123
Wintermute:~ jp80$ x1_dec=`printf %3.3f "$x1" | awk -F. '{print  
"0."$2}'`;
Wintermute:~ jp80$ echo $x1_dec
0.

Wintermute:~ jp80$ x1=123.456
Wintermute:~ jp80$ x1_dec=`printf %3.3f "$x1" | awk -F. '{print  
"0."$2}'`;
-bash: printf: 123.456: invalid number

La stessa cosa vale anche se si pone x1="123.456" (ossia marcandolo  
esplicitamente come stringa).

Non so cosa serva quell'estratto, ma pare non funzionare (almeno sul  
mio Mac). o_O'

Se lo scopo è quello, credo che funzioni qualcosa come (senza il  
controllo sulla terza cifra decimale):

Wintermute:~ jp80$ x1=123.456
Wintermute:~ jp80$ x1_dec="0.$(echo $x1 | cut -f2 -d'.')"
Wintermute:~ jp80$ echo $x1_dec
0.456

(si può fare di meglio, ma son stanco... abbiate pietà ^^ )

Ciao.

JP


Maggiori informazioni sulla lista bglug