Bash script con arreglos en GRASS-QGIS

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )
Responder
Avatar de Usuario
cerenkov
Forista Medio
Forista Medio
Mensajes: 404
Registrado: Jue Jun 17, 2010 5:23 am
Ubicación: Venezuela

Bash script con arreglos en GRASS-QGIS

Mensaje por cerenkov »

A raíz de una recomendación reciente de neurus, con relación al libro en pdf Advanced Bash-Scripting Guide, pude realizar un script para encontrar valores máximos en un arreglo producto de la expansión de un comando propio del ambiente de cónsola de GRASS en QGIS. Lo expongo a continuación:

Código: Seleccionar todo

#! /bin/bash
clear
temp=(`v.db.select map=cuenca_intercepto2 col=distancia | grep -oE '[0-9.-]*'`)
length=$(expr `echo ${#temp[*]}` - 1)
mayor=0
for i in $(seq 0 2 $length)
do
suma=$(echo "scale=5; (${temp[$i]} + ${temp[$i+1]})*100000" | bc)
suma=${suma/.*}
if [ $suma -gt $mayor ] 
   then 
	let "mayor = $suma"
fi
done
echo $(echo "scale=5; $mayor/100000" | bc)


Su ejecución la comento en:

Script de bash para determinar valor máximo en columnas con v.db.select (GRASS-QGIS)

Se da especial énfasis (porque fueron los escollos que tuve que sortear para que el script hiciera lo que yo quería) a la manera como bash considera la implementación y manejo de los arreglos en los cálculos, como determinar la extensión del arreglo como límite de secuencia en los bucles for, como establecer la sintaxis para que recorra el bucle de 2 en 2 en lugar del default de 1 en 1 (existe una sintaxis tipo C que también funciona pero que no es incluida aquí), cómo efectuar operaciones en punto flotante para que estas no sean consideradas como string (uso de la calculadora de precisión arbitraria bc), cómo convertir números en punto flotante en enteros y cómo efectuar comparaciones en punto flotante con if/then a pesar de que estas no son permitidas en bash. Espero que sea útil a otros.

Saludos

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje