Ho sempre avuto un certo timore reverenziale ad utilizzare awk ma devo dire che la potenza offerta è veramente fantastica.
Questo semplice script genera un file con delle query di update a partire da un input fornito come select da un database.
Una casistica abbastanza diffusa che spesso si risolve applicativamente. Suggerisco l’uso di una procedura del genere nel caso di caricamenti batch di grosse quantità di dati.

#!/bin/sh

mysql -uroot -p calderone -BNe “SELECT id,utente from account;” | awk -v i=0 -v tabella=pippo ‘{ elencoID[i]=$1; elencoNomi[i]=$2; i++; }
END {
queryUpdate=”UPDATE “tabella” SET utente = ‘\”%s’\” WHERE id = ‘\”%s’\”;”

for (i=0; i
printf(queryUpdate”\n”,elencoNomi[i],elencoID[i]);
}
}’ > query_esempio_awk.sql

Qualche nota per i neofiti:

  • awk esegue il codice tra parentesi quadre per ogni record presente nella query di input.
  • Ad ogni esecuzione ciascun campo viene individuato come una variabile posizionale $1, $2, …
  • La funzione END viene eseguita solo alla fine dell’input e genera fisicamente il file sql in uscita.
  • La variabile NR è una variabile built-in di awk è indica il “Number of Row”

Buon lavoro a tutti