Suma de numeros 'fixed' + 'scientific' en cónsola de bash [SOLUCIONADO]

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: maiku, akodo

Responder
Avatar de Usuario
cerenkov
Forista Medio
Forista Medio
Mensajes: 402
Registrado: Jue Jun 17, 2010 5:23 am
Ubicación: Venezuela

Suma de numeros 'fixed' + 'scientific' en cónsola de bash [SOLUCIONADO]

Mensaje por cerenkov »

Ante todo un saludo para los foristas.

Este código:

Código: Seleccionar todo

#!/bin/bash
clear
read -p "Nombre del raster para calcular area 3D = " input_raster
temp1=`r.surf.area input=$input_raster vscale=1 | grep -i 'estimated' | grep -oE '[0-9.+e]*'`
temp2=`echo $temp1 | awk '{print $5}'`
echo $temp2
r.mapcalc "temporal=if($input_raster,1)"
r.to.vect --quiet input=temporal output=temporal_vector feature=area -s 
g.remove rast=temporal
v.type --quiet input=temporal_vector output=temporal_vector_linea type=boundary,line
g.remove vect=temporal_vector
v.category --quiet input=temporal_vector_linea type=line layer=1 output=temporal_vector_linea_cat
g.remove vect=temporal_vector_linea
v.to.rast --quiet input=temporal_vector_linea_cat value=1 output=temporal_linea_raster use=val
g.remove vect=temporal_vector_linea_cat
temp3=`r.report map=temporal_linea_raster units=me | grep -i 'value 1' | grep -oE '[0-9]*'`
temp4=`echo $temp3 | awk '{print $3 $4}'`
suma=$(echo "scale=5; ($temp4 / 2)"| bc)
echo $suma
g.remove rast=temporal_linea_raster
en cónsola de bash (ambiente de GRASS en QGIS) produce esta salida (todavía falta pulir algunos detalles):

Código: Seleccionar todo

Nombre del raster para calcular area 3D = circulo2
7.810173e+05
 100%
Removing raster <temporal>
Removing vector <temporal_vector>
Removing vector <temporal_vector_linea>
Removing vector <temporal_vector_linea_cat>
 100%
53918.50000
Removing raster <temporal_linea_raster>
Sin embargo, me interesa sumar 7.810173e+05 y 53918.50000 pero la calculadora bc produce error por el formato en notación "científica" del primer número. Existe algún procedimiento expedito para transformar 7.810173e+05 en 781017.3?

Saludos
Última edición por cerenkov el Mar Abr 10, 2012 8:41 am, editado 1 vez en total.

Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1837
Registrado: Dom Oct 10, 2004 7:00 am

Re: Suma de numeros 'fixed' + 'scientic' en cónsola de bash

Mensaje por neurus »

/usr/bin/printf "%f\n" 7.810173e+05

Avatar de Usuario
cerenkov
Forista Medio
Forista Medio
Mensajes: 402
Registrado: Jue Jun 17, 2010 5:23 am
Ubicación: Venezuela

Re: Suma de numeros 'fixed' + 'scientic' en cónsola de bash [SOLUCIONADO]

Mensaje por cerenkov »

neurus escribió:/usr/bin/printf "%f\n" 7.810173e+05
Muchas gracias amigo neurus. Eso era precisamente lo que necesitaba. Finalmente, el código quedó así :

Código: Seleccionar todo

#!/bin/bash
clear
read -p "Nombre del raster para calcular area 3D = " input_raster
temp1=`r.surf.area input=$input_raster vscale=1 | grep -i 'estimated' | grep -oE '[0-9.+e]*'`
temp2=`echo $temp1 | awk '{print $5}'`
temp3=`/usr/bin/printf "%f\n" $temp2`
temp4=`echo ${temp3/,/.}`
r.mapcalc "temporal=if($input_raster,1)"
r.to.vect --quiet input=temporal output=temporal_vector feature=area -s 
g.remove rast=temporal
v.type --quiet input=temporal_vector output=temporal_vector_linea type=boundary,line
g.remove vect=temporal_vector
v.category --quiet input=temporal_vector_linea type=line layer=1 output=temporal_vector_linea_cat
g.remove vect=temporal_vector_linea
v.to.rast --quiet input=temporal_vector_linea_cat value=1 output=temporal_linea_raster use=val
g.remove vect=temporal_vector_linea_cat
temp5=`r.report map=temporal_linea_raster units=me | grep -i 'value 1' | grep -oE '[0-9,]*'`
temp6=`echo $temp5 | awk '{print $3}'`
temp7=`echo ${temp6//,/""}`
suma=$(echo "scale=5; ($temp4 + $temp7 / 2)"| bc)
g.remove rast=temporal_linea_raster
echo "El area 3D es = " $suma "m2"
y esta es la salida esperada (un poco más simplificada porque ya no se imprimen variables intermedias):

Código: Seleccionar todo

Nombre del raster para calcular area 3D = circulo2
 100%
Removing raster <temporal>
Removing vector <temporal_vector>
Removing vector <temporal_vector_linea>
Removing vector <temporal_vector_linea_cat>
 100%
Removing raster <temporal_linea_raster>
El area 3D es =  834935.800000 m2
Una última pregunta. Que manual tiene cosas tan interesantes como esta?

Saludos

Nota: Le encontré un bug que ya corregí aquí.
Última edición por cerenkov el Jue Abr 12, 2012 4:36 am, editado 1 vez en total.

Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1837
Registrado: Dom Oct 10, 2004 7:00 am

Re: Suma de numeros 'fixed' + 'scientific' en cónsola de bash [SOLUCIONADO]

Mensaje por neurus »

Bueno, si las 500 páginas de la Advanced Bash-Scripting Guide no te alcanzan, siempre tienes las páginas man. Nota: juraría que alguna vez hubo versión en español, pero no la encuentro. Si existe, seguramente Niky45 tiene una copia.


De hecho, como no recordaba exactamente el formato de los parámetros, leí rápidamente el man de printf para responderte. Ah, y algo que no aclaré en el post anterior: tengo la costumbre de agregar una nueva línea (\n) a veces sin siquiera pensarlo, precisamente como en el post anterior. No estoy seguro de que te haga falta en tu script.

En realidad, después de leer con atención el manual de Bash avanzado, y practicar un poco, uno olvida la mayor parte de los comandos, pero "mágicamente", por esas cosas de la memoria, los recuerda cuando los necesita para resolver un problema; o al menos recuerda dónde buscar.

Avatar de Usuario
cerenkov
Forista Medio
Forista Medio
Mensajes: 402
Registrado: Jue Jun 17, 2010 5:23 am
Ubicación: Venezuela

Re: Suma de numeros 'fixed' + 'scientific' en cónsola de bash [SOLUCIONADO]

Mensaje por cerenkov »

Gracias por el manual avanzado. Por otra parte, antes de postear aquí me leí rápidamente el manual de bc pero no pude encontrar lo que quería. Ya tenía en mente varias soluciones alternativas (que no pude probar por estar sometido a uno de los "rutinarios" apagones diarios en el insólito Petroestado de Venezuela; que en esta oportunidad duró 2 horas) por si nadie respondía. Sin embargo, un simple copy/paste de tu código en cónsola funcionó inmediatamente y ni me preocupe por el \n. Lo que si tuve que hacer fue sustituir la coma por punto en el nuevo formato (me imagino que porque considera el idioma predeterminado del sistema en español) para que bc finalmente funcionara.

Gracias nuevamente y saludos

Nota: Esto me sirvió para un mini artículo en mi Blog (en el cual desde hace 8 meses prácticamente sólo trabajo con tecnologías libres) donde agradezco tu aporte.

Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1837
Registrado: Dom Oct 10, 2004 7:00 am

Re: Suma de numeros 'fixed' + 'scientific' en cónsola de bash [SOLUCIONADO]

Mensaje por neurus »

No había visto esta respuesta.

Como ya está solucionado, me permito un off topic: ¿eres agrimensor o ingeniero civil?

Pregunto, porque me di una vuelta por tu blog -lo siento, creo que no volveré a pasar por allí- y me encontré con fórmulas y cálculos para determinar áreas. Me llamó muchísimo la atención una entrada que decía: "Estimar el volumen de una montaña...". Por supuesto, es un problema sencillo que resolví mentalmente: tomo la montaña, la sumerjo en una bañera y salgo a gritar desnudo a la calle.

Y esa es la razón por la cual estoy preguntando aquí, sin menospreciar -créeme- de ningún modo tu labor. Pero tengo que saberlo: ¿quién por todos los cielos, y para qué, querría saber el volumen de una montaña?

Avatar de Usuario
hipersayan_x
Forista Legendario
Forista Legendario
Mensajes: 1905
Registrado: Vie Abr 27, 2007 7:00 am
Contactar:

Re: Suma de numeros 'fixed' + 'scientific' en cónsola de bash [SOLUCIONADO]

Mensaje por hipersayan_x »

neurus escribió:¿quién por todos los cielos, y para qué, querría saber el volumen de una montaña?
Tal vez sirva para usos de cartografía satelital, o megaminería suponiendo que quieras mandar a volar la montaña para construir algo ahí, te serviría para mas o menos saber que cantidad de material necesitarías transportar, o hacer un calculo estimativo de las riqueza que posee, supongo :|
Desarrollo en Qt: Qt Developer Network
Mis proyectos: github | SourceForge.net

Avatar de Usuario
cerenkov
Forista Medio
Forista Medio
Mensajes: 402
Registrado: Jue Jun 17, 2010 5:23 am
Ubicación: Venezuela

Re: Suma de numeros 'fixed' + 'scientific' en cónsola de bash [SOLUCIONADO]

Mensaje por cerenkov »

hipersayan_x escribió:
neurus escribió:¿quién por todos los cielos, y para qué, querría saber el volumen de una montaña?
Tal vez sirva para usos de cartografía satelital, o megaminería suponiendo que quieras mandar a volar la montaña para construir algo ahí, te serviría para mas o menos saber que cantidad de material necesitarías transportar, o hacer un calculo estimativo de las riqueza que posee, supongo :|
Esas son varias de las razones posibles.

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje