martedì 27 marzo 2012

AWK: Chiamata HTTP e elaborazione del risultato

Non sono molto orgoglioso di questa riga che sto per presentare ma dato che fino ad ora mi è servita e non ho scoperto come fare di meglio, la tramando ai posteri.

Ho un server con un applicazione Web che, a domanda, risponde con un codice numerico. La mia request deve essere fatta passando un parametro.
La mia esigenza era quella di interrogare il server a partire da un file di input variabile più o meno lungo dove ogni riga contiene un parametro e rielaborare la risposta andando a scrivere un nuovo file di output.
In pratica:

cat $FILE_INPUT | awk '{system("GET \"http://localhost/MioServer?param=\""$1); print ";"$1;}' > $FILE_OUTPUT

Vediamo di spiegare:


  1. Il mio FILE_INPUT contiene tanti parametri, uno per ogni riga. Eseguire il "cat" lo stampa a video ma la pipe invece lo passa come input al buon awk.
  2. awk di base si usa con la sintassi awk '{istruzioni}', io in particolare uso il comando "system" che mi permette di lanciare un comando dalla mia shall, nel caso specifico una chiamata con il comando GET al mio server web.
  3. Il parametro usato da awk è $1 perchè il mio file ha una sola colonna e quindi ogni riga del file che arriva ha un solo parametro.
  4. La mia GET ottiene in risposta un codice numerico che viene stampato a video.
  5. L'istruzione "print" che segue la GET, mi permette di concatenare al mio "response_code" il carattere ";" e a seguire lo stesso parametro iniziale (sto quindi creando un file csv usando il carattere ";")
  6. Infine ridirigo il tutto su FILE_OUTPUT ottendo il mio file csv bello e pronto.
Prestate attenzione agli apici, i doppi apici e i carattei di escape:
  • GET vuole i doppi apici
  • System vuole i doppi apici
  • AWK vuole gli apici singoli
Buon divertimento


Nessun commento:

Posta un commento