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