Comparación con decimales en bash
Lunes, 30 de agosto de 2010Necesitaba realizar unas comparaciones de números con decimales, positivos y negativos para unos pequeños scripts que informan sobre el estado del clima (posa el ratón un segundo sobre la imagen de “cielo sobre Cartagena” para leerlo. En la columna de la derecha).
Problema
Si en un script hacemosecho "scale=2; 12.5 - 12.2 | bc -l" nos dará como resultado .3 (sin cero delante).
Para producir un número “entero” (con el cero delante), podemos hacer lo siguientea=12.5; b=12.2;\
echo "scale=6; resta = $a -$b; if (resta < 1 && 0 <= resta ) { print "0" }; print resta" |\
bc -l
Que imprimiría 0.3, PERO si la resta es negativa nos mostrará 0-.3 (cero menos coma tres)
Además ninguna de las formas anteriores es admitida por IF que solo compara números enteros:a=0.3; if [ $a -gt 0.1 ]; then echo "A es mayor que B"; else echo "A es menor que B"; fi
DICE que -->bash: [: 0.3: se esperaba una expresión entera
Solución
Al final una solución de casa de mi abuela: multiplicar todo por 1000 (o cualquier otro factor suficientemente grande como para convertir tus operaciones en números enteros) y a tomar viento. Algo así:#hacemos la operacion que nos producía un decimal negativo
resta=`factor=1000; a=12.2; b=12.5; \
echo "( $a*$factor ) - ( $b*$factor )" | bc`
#$resta es -300.0
#quitamos los decimales
resta=`${resta/.*/}
#$resta es -300
#hacemos comparacion
comparador=`factor=1000; \
echo "$factor * 0.1" | bc`
#$comparador=100.0
#quitamos los decimales
comparador=${comparador/.*/}
#hacemos la comparacion
if [ $resta -gt $comparador ]; then echo "A es mayor que B"; else echo "A es menor que B"; fi
A es menor que B

No sé que hice el otro día probando las KDE4 que me sobreescribí mi querido Kflickr de KDE3 con la versión de KDE4. Asi es que me tocó, descargar de nuevo, modificar de nuevo y recompilar. Para que no me vuelva a pasar he creado un rpm con las modificaciones que tenía mi anterior instalación y (sobretodo) un par de arreglos en la traducción (lo de “ancho de banda del upload” y “autentique un nuevo usuario” me estaban matando).

Pues las primeras impresiones de las recien estrenadas KDE4.5 es: “me vuelvo a KDE3”