sabato 22 dicembre 2012

Brevi Esercizi #10. Gestire due tabelle con awk

Salve!

Quesito di oggi.
Ho due tabelle. Nella prima ho un elenco di alunni con le rispettive matricole; nella seconda ho lo stesso elenco di alunni ma con voti e materie. Voglio avere una sola tabella che comprende elenco di alunni, matricole, voti e materie.


Partiamo dalle due tabelle.

Prima tabella (tabella1.txt)
Luigi   45695
Nicola  45696
Eugenio 45697
Luisa   45698
Gino    45699
Emma    45700
Rosy    45701
Nino    45702
Marco   45703
Ennio   45704
Paola   45705
Seconda tabella(tabella2.txt)
Luigi   27   matematica
Nicola  28   fisica
Eugenio 18   fisica
Luisa   21   matematica
Gino    23   matematica
Emma    24   fisica
Rosy    23   matematica
Nino    29   matematica
Marco   18   fisica
Ennio   25   fisica
Paola   30   fisica
Passiamo allo script in awk (es.awk)
#!/usr/bin/awk -f

BEGIN { 
         print "\n\t.............START....................\n"
         FORMAT="\t%-12s%-12s%-8s%s\n"
         printf FORMAT,"ALUNNI","MATRICOLE","VOTI","MATERIE"
  }
   {  
          if (FILENAME == "tabella1.txt") {
               matricole[$1] = $2
          }
          if (FILENAME == "tabella2.txt") {
              printf FORMAT, $1,matricole[$1],$2,$3 
          }
   }
END {
print "\n\t.................END..................\n"
}
Come potete vedere lo script è abbastanza semplice. FILENAME è una variabile predifinita di AWK che contiene, come valore, il nome del file processato. In pratica lo script ragiona così. Se il valore di FILENAME è uguale  al nome "tabella1.txt", assegna $2 all'array matricole (la cui chiave è $1). Poi, se il valore di FILENAME è uguale al nome "tabella2.txt", stampa l'elenco degli alunni ($1), le matricole (contenute nel primo file), i voti ($2) e l'elenco delle materie ($3). Semplice, no?

Risultato:
L'indice di "Brevi Esercizi" lo trovate qui.
Se volete dare una sbirciata al sequel "Un po' di AWK" andate qui

Vi ricordo inoltre che il caro Juhan ha scritto un bel post su awk. qui.
Nel post Juhan dice tante cose; tra queste, anche che awk andrebbe scritto minuscolo perchè così hanno tuonato i signori A., W. e K. Intanto io ormai c'ho preso la mano...lo scrivo grande! :))

Alla prossima!

Nessun commento:

Posta un commento