viernes, 8 de abril de 2011

Iterando sobre un archivo con claves y consultando en BD (en bash)

El problema: un archivo/fichero con columnas separadas por tuberías "|" y por cada identificador contenido en la primera columna de éste, se debía buscar en BD unos datos específicos.

Les dejo este pequeño script que tiene algunas cosillas útiles, como la utilización de contadores en bash fácilmente (a lo C).

#!/bin/bash

dbuser=DB_USER
dbhost=DB_HOST
dbname=DB_NAME
ln=1 # counter
sql="SELECT ... FROM ... WHERE ... id="

cat content.csv |
while read line; do
  id=`cut -d'|' -f1 <(echo $line)`

  if [ $ln -gt 1 ]; then
    mysql -u $dbuser -h $dbhost $dbname --batch --skip-column-names -e "$sql$id" | sed 's/\t/|/g'
  fi

  let ln+=1
done
Por cada línea del archivo content.csv se toma la primera columna (como id - luego de la primera línea) y luego se ejecuta una query en BD utilizando este número; el resultado es formateado con columnas separadas por tuberías. Interesante: la forma en que se incrementa el contado con "let+=1".
OJO: Esto se pudo hacer con otro lenguaje de programación, ideal perl, pero como me da nota/mola bash lo hice de esta forma. Además, cabe acotar que esto es sólo algo puntual, no es una base de código que deberá mantenerse en el tiempo, de no ser así, recomendaría otra vía.

No hay comentarios:

Publicar un comentario