domenica 16 dicembre 2012

Un po' di AWK. Tredicesima parte.

Oggi cercheremo di affrontare un argomento non proprio semplicissimo: Gli arrays in AWK.

Ecco, questo è un array:

ortolano["banana"] = 20


dove
  • ortolano è il nome dell'array
  • banana è l'indice dell'array. A dire il vero preferisco più chiave che indice. Intanto i signori A., W., e K. hanno preferito chiamarlo indice. Continuerò a chiamarli chiavi. Anzi, keys. 
  • 20 è il valore assegnato all'array ortolano.
 In altri termini, l'array ortolano, la cui key è banana, ha come valore 20

Per vedere il valore dell'array ortolano[banana], si usa print. Costruiamo la riga di comando.

$ awk 'BEGIN{ortolano["banana"]=20; print ortolano["banana"]}'

Come risultato, ovviamente, ci darà 20. Provare per credere

 Ho appena finito di leggere il manuale originale di AWK, di cui vi mostro  la copertina...
Ad onor del vero i Signori A., W e K, l'argomento array, lo hanno trattato veramente maluccio benino.

Procediamo con gli esempi.

ortolano["banana"] = 20
ortolano["pesca"] = 37
ortolano["melone"] = 10

Costruiamo uno script che ci dica chiavi e rispettivi valori dell'array ortolano. (ciclare.awk)
#!/usr/bin/awk -f

BEGIN {
  ortolano["banana"]=20
  ortolano["pesca"]=37
  ortolano["melone"]=10

  for(key in ortolano) {
    print key, ortolano[key]
  }
}
Si capisce, vero? la variabile Key è andata a "pescare" nell'array ortolano le nostre tre chiavi (banana pesca e meloni) e print ce li stampa. E ci stampa pure i rispettivi valori (ortolano[key]).

Eseguire lo script, prego.

Cerchiamo di fare qualche passo avanti.

Creiamo uno script autoesplicativo. (es.awk)
#!/usr/bin/awk -f

BEGIN {
  print "\n\n"
  #L'array geo ha come chiavi tre Stati e, come valori, le rispettive capitali.
  geo["Francia"] = "Parigi"
  geo["Angola"] = "Luanda"
  geo["Bhutan"] = "Thimphu"
  for (i in geo) {
    printf "%8s %06s\n", i, geo[i] #su printf ci ritorneremo
  }
  # Eliminiamo la chiave "Francia" con il comando delete.
  print "\n\n"
  delete geo["Francia"]
  for (i in geo) {
    print i, geo[i] #Controlliamo se ha eliminato la chiave Francia col suo relativo valore.
  }
  # cerca se la chiave Francia esiste
  print "\n\n"
  print "Francia " ( "Francia" in geo )   #Dà 0, la chiave Francia non esiste
  print "Bhutan " ( "Bhutan" in geo )"\n"  #Dà 1, la chiave Bhutan esiste
}
Ora facciamo un piccolo esperimento. Creiamo una tabella semplice semplice. (tab.txt)

banane  15
pesche  13
meloni  12
meloni  10
banane  14
pesche  12


E vediamo se si capisce cosa fa lo script seguente. E' semplice semplice, ma estremamente potente. (ab.awk)
#!/usr/bin/awk -f

 {
   n[$1]+=$2;
 }
  END {
   for (i in n) {
    print i,n[ i ]
   }
}
Ci stiamo avvicinando alla potenza di questo straordinario strumento, l'array. Nelle prossime puntate, ancora arrays. Ciro ha capito al volo. Mio nonno di meno. Ma lui è giustificato, non ci sente tanto bene. :)

L'indice di "Un  po' di AWK" lo trovate qui

Alla prossima.

Nessun commento:

Posta un commento