mercoledì 5 dicembre 2012

Brevi Esercizi #8: Classifica campionato di calcio con AWK

Salve!

L'esercizio di oggi è quello di creare la classifica del campionato di calcio di serie A partendo dalle partite disputate. Ho usato AWK ma lo stesso esercizio può essere svolto utilizzando Bash, Python e altri linguaggi. Ehi, fatevi avanti!!! Ovviamente gli eventuali script nei commenti saranno pubblicati a nome dell'autore. :)
Certamente pure il mio script può essere migliorato....perciò fatevi avanti!!!


Per una questione di spazio, ho preso in considerazione solo le prime quattro giornate del campionato di calcio 2012/2013.

Partiamo dalla tabella. (tabella.txt)
fiorentina udinese      2 1 #prima giornata
juventus parma          2 0  
milan  sampdoria        0 1  
atalanta lazio          0 1   
chievo  bologna         2 0  
genoa  cagliari         2 0  
palermo napoli          0 3  
pescara inter           0 3  
roma catania            2 2  
siena torino            0 0
torino  pescara         3 0 #seconda giornata 
bologna milan           1 3  
udinese juventus        1 4  
cagliari atalanta       1 1  
catania genoa           3 2   
inter roma              1 3  
lazio palermo           3 0  
napoli fiorentina       2 1  
parma chievo            2 0  
sampdoria siena         2 1 
palermo cagliari        1 1 #Terza giornata
milan atalanta          0 1 
chievo lazio            1 3 
fiorentina catania      2 0
genoa juventus          1 3
napoli parma            3 1
pescara sampdoria       2 3 
roma bologna            2 3
siena udinese           2 2
torino inter            0 2
parma fiorentina        1 1 #Quarta giornata
juventus chievo         2 0
sampdoria torino        1 1
atalanta palermo        1 0
bologna pescara         1 1
cagliari roma           0 3
catania napoli          0 0
inter siena             0 2 
udinese milan           2 1
lazio genoa             0 1
Passiamo allo script (classifica.awk)
#!/usr/bin/awk -f

 BEGIN {
         print "\n............................"
         FORMAT="\t%-18s%s\n"
         printf FORMAT,"SQUADRE","PUNTI"
  }
   {  
       #In caso di vittoria in casa, assegno 3 punti alla prima
       # 0 punti alla seconda squadra.
       if ($3 > $4 ) {
           c[$1]+=3; c[$2]+=0
       }
       #In caso di vittoria fuori casa, assegno 3 punti alla seconda
       #0 punti alla prima squadra.
       else if($3 < $4){
           c[$1]+=0; c[$2]+=3
       }
       #In caso di pareggio, assegno un punto a squadra.
       else if ($3==$4){
           c[$1]+=1; c[$2]+=1; 
       } 
      c[$1] += $2 
   }
END {
       ordina = "sort -k 2nr"
       for (i in c) {
         printf FORMAT,i,c[i] | ordina
       } 
       close(ordina)
       print "............................\n"
  }
Rendiamolo eseguibile (dopo averlo salvato nella stessa directory della tabella).

$ chmod +x classifica.awk

E ora eseguiamolo.

$ ./classifica.awk tabella.txt

Al momento ho introdotto solo l'elenco delle squadre e i relativi punti...Prossimamente lo vorrò migliorare integrando altre voci quali le partite in casa e fuori casa vinte, perse o pareggiate, i gol fatti e subiti, etc, etc. 

Chi sta seguendo il sequel "Un po' di AWK" avrà notato che ci sono un sacco di cose che ancora non ho trattato....Piano piano ci riuscirò...

Se notate delle imperfezioni, volete completare voi lo script, ne volete proporre altri in altrettanti linguaggi...insomma, fatevi avanti...Se poi mi volete maledire in privato, potete usare il mio indirizzo e-mail (che trovate nel menu Uber Mich)

Vi ricordo che:
L'indice del sequel "Brevi Esercizi" lo trovate qui, mentre se volete dare una sbirciatina all'indice di "Un po' di AWK", andate qui.

Alla prossima!

2 commenti:

  1. ti rifaccio i complimenti x il blog, sai avevo formattato e mi ero dimenticato i preferiti ed ora ho ritrovato il blog e son propio contento Buon fine e buon inizio

    RispondiElimina
    Risposte
    1. Grazie tante per i complimenti, troppo buono! Auguri di buon anno anche a te!! :)

      Elimina