venerdì 14 dicembre 2012

Brevi Esercizi #9: AWK e la cena dell'immacolata

Salve!

L'esercizio di oggi consiste in uno script in AWK. Tanto per cambiare.

Partiamo dal principio. La sera dell'immacolata ho avuto degli ospiti. La cena mi è venuta a costare 160 euro. Di questo passo non arriverò neanche a metà mese.


Per sdrammatizzare ho creato uno script in AWK che, oltre a dirmi quando ho speso in totale, calcola anche il "peso", in termini percentuali, di ogni prodotto sul totale.

Altre cene sono previste per il 24, 27 e 31 dicembre. Tutte a casa mia. Tanto ci sono io che pago!!! :)

Se pensate che lo script possa essere impostato meglio, fatevi avanti.

Partiamo dalla lista della spesa. (tab.txt)
25 euro di gamberetti
15 euro di vino
 5 euro di pasta
20 euro di trote
 8 euro di insalata
25 euro di dolci
15 euro di tabacco
 5 euro di nutella
25 euro un asciugacapelli
10 euro di pecorino
 3 euro di stuzzicadenti
 4 euro di tovaglioli
Ovviamente l'asciugacapelli non fa parte della cena. Comunque lo farò addebitare all'enel. Il vecchio si è bruciato a causa di un picco di alta tensione.

Passiamo alla script (es.awk)
#!/usr/bin/awk -f

 BEGIN {
         print "\n\t.............START....................\n"
         FORMAT="\t%-14s%-18s%s\n"
         printf FORMAT,"TOTALE","PRODOTTI","COSTI %" 
  }
   {  
     spesa[$4]= $1
     somma += $1;
   }
END {
       print "\n\t",somma " euro"
       for (i in spesa) {
       printf FORMAT,sum,i,(100*spesa[i])/somma "%"
       } 
       print "\n\t.................END..................\n"
  }
E' inutile dirvi che va salvato nella stessa directory contenente la tabella (tab.txt).
Ops, gamberetti.

L'indice di "Brevi Esercizi" lo trovate qui.

Alla prossima!

2 commenti:

  1. Ciao! Cosa vuol dire: FORMAT="\t%-14s%-18s%s\n"
    Grazie! I tuoi esercizi sono fatti veramente bene :)

    RispondiElimina
    Risposte
    1. Si tratta di un metodo per formattare le tabelle secondo le nostre esigenze. Qui trovi una breve spiegazione: https://www.gnu.org/software/gawk/manual/html_node/Printf-Examples.html

      E grazie!!!! :)

      Elimina