[Shell Unix] división, redondeo
renaud
-
lami20j Mensajes publicados 21506 Fecha de registro Estado Moderador, Colaborador de seguridad Última intervención -
lami20j Mensajes publicados 21506 Fecha de registro Estado Moderador, Colaborador de seguridad Última intervención -
Bonjour,
Para realizar operaciones con números en punto flotante en un script shell, puedes utilizar el comando `bc`, que te permite trabajar con decimales. Para redondear al entero más cercano, puedes usar la siguiente sintaxis:
```bash
res=$(echo "scale=0; $a / $b + 0.5 / 1" | bc)
```
En este caso, `scale=0` asegura que no se muestren decimales, y al agregar `0.5` antes de la división entera, se logra el redondeo al entero más cercano. Asegúrate que las variables `$a` y `$b` estén definidas correctamente en tu script.
Espero que esto te ayude.
Merci !
Para realizar operaciones con números en punto flotante en un script shell, puedes utilizar el comando `bc`, que te permite trabajar con decimales. Para redondear al entero más cercano, puedes usar la siguiente sintaxis:
```bash
res=$(echo "scale=0; $a / $b + 0.5 / 1" | bc)
```
En este caso, `scale=0` asegura que no se muestren decimales, y al agregar `0.5` antes de la división entera, se logra el redondeo al entero más cercano. Asegúrate que las variables `$a` y `$b` estén definidas correctamente en tu script.
Espero que esto te ayude.
Merci !
4 respuestas
Hola,
¿Puedes publicar un ejemplo concreto, por favor, de lo que obtienes y de lo que te gustaría obtener?
--
Z'@+...che.
¿Puedes publicar un ejemplo concreto, por favor, de lo que obtienes y de lo que te gustaría obtener?
--
Z'@+...che.
JP : Zen, ¡mis Nuggets! ;-) El conocimiento solo es útil si se comparte.
Gracias por mirar tan rápido,
Lo que quiero hacer:
escribir un número en formato científico en un archivo .txt
yo hago:
M=$((5/2));
printf "%E" $M >> in
con eso obtengo: 2.000000E+00
quiero obtener 2.500000E+00
Además, estoy obligado a dividir enteros cuando me gustaría dividir reales.
Así que intenté con este comando:
echo "scale=2; 5.7/3" | bc >> in
Obtengo 1.90, pero no logro escribir este número en formato científico.
Bueno, todavía no sé si soy claro, pero no dudes en pedirme más aclaraciones si es necesario.
Gracias de antemano
Reg
Lo que quiero hacer:
escribir un número en formato científico en un archivo .txt
yo hago:
M=$((5/2));
printf "%E" $M >> in
con eso obtengo: 2.000000E+00
quiero obtener 2.500000E+00
Además, estoy obligado a dividir enteros cuando me gustaría dividir reales.
Así que intenté con este comando:
echo "scale=2; 5.7/3" | bc >> in
Obtengo 1.90, pero no logro escribir este número en formato científico.
Bueno, todavía no sé si soy claro, pero no dudes en pedirme más aclaraciones si es necesario.
Gracias de antemano
Reg
[tmpfs]$ M=$(echo "scale=2; 5/2" | bc) [tmpfs]$ printf "%E\n" $M -l: printf: 2.50: invalid number 0,000000E+00 [tmpfs]$ printf "%E\n" ${M/\./,} 2,500000E+00 [tmpfs]$Es una cuestión de delimitador de valor decimal (el punto por defecto) que hay que reemplazar por una coma... --
Z'@+...che.
JP : ¡Zen, mis Nuggets! ;-) El conocimiento solo tiene valor si se comparte.
Gracias por tu respuesta,
Funciona bien
Pero ahora tengo otro pequeño problema:
necesito buscar un valor máximo en un archivo txt lleno de valores en una columna dada y un rango de líneas dado.
Puedo extraer algunas líneas del archivo en un archivo temporal gracias a los comandos head y tail, pero no logro extraer una columna.
¿Tendrías alguna idea?
Funciona bien
Pero ahora tengo otro pequeño problema:
necesito buscar un valor máximo en un archivo txt lleno de valores en una columna dada y un rango de líneas dado.
Puedo extraer algunas líneas del archivo en un archivo temporal gracias a los comandos head y tail, pero no logro extraer una columna.
¿Tendrías alguna idea?
Hola,
el archivo (los campos están separados por espacio)
tomemos el caso de la columna 5 (en negrita),
quiero, por ejemplo, mostrar el maximo para la columna 5 solo entre las líneas numeradas del 3 al 10
--
lami20j
el archivo (los campos están separados por espacio)
lami20j@debian:~/trash$ cat fic 0 8452 2844 180.88 22.81 0.09 1 8452 3137 180.62 2.28 0.14 2 8452 3430 149.66 -1.84 0.30 3 8452 3724 180.62 -28.81 0.15 4 8760 2942 118.56 -18.09 0.12 5 8760 3235 173.00 28.62 0.12 6 8760 3528 149.59 -1.97 0.17 7 8760 3821 149.75 -1.88 0.44 8 9067 3039 157.84 2.12 0.18 9 9067 3333 134.97 -5.31 0.17 10 9067 3626 149.50 -1.75 0.48 11 9375 2844 137.22 -0.03 0.13 12 9375 3137 179.19 9.19 0.14 13 9375 3430 149.38 -1.91 0.47 14 9375 3723 153.91 -19.97 0.10 15 9682 2942 125.97 26.34 0.17
tomemos el caso de la columna 5 (en negrita),
quiero, por ejemplo, mostrar el maximo para la columna 5 solo entre las líneas numeradas del 3 al 10
lami20j@debian:~/trash$ cat fic 0 8452 2844 180.88 22.81 0.09 1 8452 3137 180.62 2.28 0.14 2 8452 3430 149.66 -1.84 0.30 3 8452 3724 180.62 -28.81 0.15 4 8760 2942 118.56 -18.09 0.12 5 8760 3235 173.00 28.62 0.12 6 8760 3528 149.59 -1.97 0.17 7 8760 3821 149.75 -1.88 0.44 8 9067 3039 157.84 2.12 0.18 9 9067 3333 134.97 -5.31 0.17 10 9067 3626 149.50 -1.75 0.48 11 9375 2844 137.22 -0.03 0.13 12 9375 3137 179.19 9.19 0.14 13 9375 3430 149.38 -1.91 0.47 14 9375 3723 153.91 -19.97 0.10 15 9682 2942 125.97 26.34 0.17 lami20j@debian:~/trash$ sed '4,11!d' fic|cut -d"&" -f5|sort -n -28.81 -18.09 -5.31 -1.75 -1.88 -1.97 2.12 28.62 lami20j@debian:~/trash$ sed '4,11!d' fic|cut -d"&" -f5|sort -n|tail -1 28.62 lami20j@debian:~/trash$
--
lami20j
Hola a todos,
tengo un problema similar al de Renaud.
En mi script Shell, me gustaría dividir dos números reales o enteros y obtener un número real.
echo "scale=2; 5.7/3" | bc
Este comando funciona, pero necesito escribir el resultado en un archivo .txt
Normalmente utilizo:
printf "%E" $variable >> archivo.txt
Pero obtengo valores enteros.
¿Cómo puedo hacerlo???
Gracias de antemano
Reg
tengo un problema similar al de Renaud.
En mi script Shell, me gustaría dividir dos números reales o enteros y obtener un número real.
echo "scale=2; 5.7/3" | bc
Este comando funciona, pero necesito escribir el resultado en un archivo .txt
Normalmente utilizo:
printf "%E" $variable >> archivo.txt
Pero obtengo valores enteros.
¿Cómo puedo hacerlo???
Gracias de antemano
Reg