Script de bash para determinar raíz cuadrada en registros con db.execute

Hasta ahora, no he encontrado la manera de calcular raíces cuadradas (y otras funciones especiales como logaritmos, funciones trigonométricas, etc) usando la opción v.db.update de GRASS-QGIS para actualizar simultáneamente todos los registros de un campo. Sin embargo, mediante un script de bash, los cálculos con raíces cuadradas (y otras funciones especiales) pueden realizarse con la librería de funciones (-l) de la calculadora de precisión arbitraria bc y las actualizaciones simultáneas, en cada uno de los registros, mediante la sentencia UPDATE de SQL empleando el módulo db.execute.

El procedimiento se va a realizar en una columna (prueba) que se creó arbitrariamente en la database del vectorial rio_split, a la cual se le replicó la columna cat con v.db.update; con el fin de tener una secuencia regular sobre la cual facilitar la sustitución. La determinación, en este caso, a ser introducida en la columna prueba es la raíz cuadrada de cat (1, 2, 3, …). El script se presenta a continuación:

#! /bin/bash
clear
temp=(`v.db.select map=rio_split col=cat | grep -oE '[0-9.-]*'`)
length=$(expr `echo ${#temp[*]}` - 1)
for i in $(seq 0 $length)
do
temp2[$i]=`echo $(echo "scale=5; sqrt (${temp[$i]})" | bc -l)`
done
limite=$(expr $length + 1)
v.db.update map=rio_split column=prueba qcolumn=cat
for i in $(seq 1 $limite)
do
echo "UPDATE rio_split SET prueba="${temp2[$i-1]}" WHERE prueba=$i"| db.execute
done

Se puede generalizar para cualquier database, columnas y combinación de operaciones. En este caso se grabó como script_update, se le dió permisos de ejecución con chmod +x script_update y se ejecutó con ./script_update. Como db.execute no produce salidas (eso es función de v.db.select) entonces sólo se presenta, en la imagen siguiente, el resultado esperado de la operación del script para los 21 registros de la database (cat entre 1 y 21):

El script podría ser más corto porque las operaciones de bc pueden incluirse en la propia sentencia de UPDATE. Sin embargo, preferí crear una variable temporal (temp2[$i]) en la cual hacer las asignaciones de las operaciones de bc.

Esta entrada fue publicada en GRASS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

Una respuesta a Script de bash para determinar raíz cuadrada en registros con db.execute

  1. Pingback: Script de bash para determinar raíz cuadrada en registros con db.execute | Geoprocessing - Geoprocessamento | Scoop.it

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s