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:
#! /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