venerdì 2 novembre 2012

Un po' di AWK. Decima parte

Salve!

Eccoci alla decima puntata del sequel "Un po' di AWK". Oggi parleremo del costrutto condizionale if. Mettetevi comodi perchè la puntata di oggi è un po' impegnativa; infatti ho messo tanta verdura a cuocere (non dico carne perchè sono vegetariano).


Come ben sapete questi post su awk sono il frutto di mie sperimentazioni. Io sono del parere che si conosce per induzione o, al massimo, per intuizione. La deduzione la lasciamo ai docenti universitari, con i loro manuali belli e pronti (che a mio modesto parere non servono a un cavolo). Si, perchè solo sperimentando si capisce come funzionano le cose. L'andamento della conoscenza va dal particolare e si  avvia verso l'universale e non  il contrario. Poi ci sarebbe l'intuizione che ci permette di arrivare ad una soluzione saltanto tutti i passaggi. Si tratta di una conoscenza immediata. l'induzione invece è il procedimento che parte dal particolare per arrivare ad una legge universale. Proprio il contrario della deduzione. E poi si conosce per contrasto. Ad esempio, Io faccio uno script, viene uno di voi, me lo critica e ne propone uno migliore. Vabbè, queste idee sono nate da uno scontro verbale tra me, mio nonno e Ciro, il pastore.

Passiamo al post.

Il costrutto if, negli esempi che vi proporrò oggi, si presenta così:

{
    if (condizione) {
        azione

        azione
    }
}


La logica: Se la condizione è vera fai questa cosa o queste cose....

Se c'è l'else, avremo:

{
      if (condizione) {
           azione


      } else {
         azione


      }
}


La logica: Se la condizione è vera fai questa cosa, altrimenti fai quest'altra. Else è facoltativo.

E poi c'è il costrutto if - else if

{
    if (condizione1) {
           azione


    } else if (condizione2) {
          azione
    }
}


La logica: Se è vera la prima condizione fai questo, se è vera la seconda condizione fai quest'altro.

Non spaventatevi delle parentesi graffe, eh! :)

Passiamo agli esempi. Che abbiamo dedotto già troppo...

Partiamo dalla seguente tabella. (tabella.txt)

1 -example01.it - colomba - h3
2 -example02.it - falco      - 9qa
3 -example03.it -               - f2aj
4 -example04.it - luna       - ueioq
5 -example05.it - marzo     -
6 -example06.it - toro       - ueu74xx
7 -example07.it - zorro      - m7nnvjei
8 -example08.it - noir        -
9 -example09.it - alfa         - eeb594wbvi
10-example10.it - beta       - ieqob847ieut
11-example11.it -              - gghiwo98jg
12-example12.it - delta      - feiqog35
13-example13.it - zeta       - ieoq8


Come è semplice capire, la tabella contiene un elenco di siti a cui sono registrato con i rispettivi nick e password.
Ricordo che la tabella (tabella.txt) va salvata nella stessa cartella in cui mettiamo gli script.

Primo script (if0.awk): Gli chiediamo di stampare a video solo le righe pari. Vi ricordo che "==" sta per uguale. Da non confondere con "=" che è il segno con cui si assegna un valore ad una variabile. Inoltre in questo script compare il modulo (%2) che altro non è che il resto della divisione. Ne parleremo in seguito.

#!/usr/bin/awk -f
#stampa le righe pari
{
    if ($0 % 2 == 0) {
        print "righe pari", $0
    }
}


Lo rendiamo eseguibile

$ chmod +x if0.awk

E lo lanciamo

$ ./if0.awk tabella.txt

Secondo script (if1.awk): Gli chiediamo di stampare solo le righe dispari.

#!/usr/bin/awk -f
#stampa le righe dispari
{
    if ($0 % 2 != 0) {
        print "righe dispari", $0
    }
}


per via di una svista, ho scritto pari al posto di dispari...



Terzo script (if2.awk): Gli chiediamo quali siti abbiano le password più sicure e quali no! Ricordo che la sicurezza della password non è data solo dalla sua lunghezza. Ma questo è solo un esempio. In questo script compare la funzione lenght(). Essa ci dice la lunghezza di una stringa. Ne parleremo in seguito.

#!/usr/bin/awk -f
#Le password più sicure
BEGIN { FS = "-"
}
{
      if (length($4) > 9) { 
           print  $2, " ha la password sicura"
      } else {
              print $2, " non ha la password sicura"
      }
}



Quarto script (if3.awk). Questo script controlla se dalla tabella manchi qualche password.

#!/usr/bin/awk -f
#Controllare se manca la password a qualche sito
BEGIN { FS = "-"
}
{
    if ($4 =="") { 
       print "il sito " $2, "non ha la password"
    }
}



Quinto script (if4.awk). Questo script controlla se dalla tabella manchino pw e nick. Compare un'espressione apparentemente difficile ($4 ~ /^[ ]*$/ ). Per ora vi dico solo che fa miracoli. Ci dice infatti se un campo è vuoto. Anche "" lo fa( vedi lo script precedente), ma non bene come questa espressione. Giuro, ne  parleremo.

#!/usr/bin/awk -f
#controllare se mancano password e nick
BEGIN { FS = "-"
}
{
    if ($4 ~ /^[ ]*$/) {
        print "il sito " $2, "non ha la password"
    } else if ($3 ~ /^[ ]*$/) {
        print "il sito " $2, "non ha il nick"
    }
}



Sesto e ultimo script (if5.awk). Gli chiedo qual è la password più lunga contenuta nella tabella.

#!/usr/bin/awk -f
#la password più lunga
BEGIN { FS = "-"
}
{
    if (length($4) > max ) { 
      max = length($4)
          sito = $2
          pw = $4
      }
}     
END {
     print "La pw più lunga ha", max, "caratteri,", "è del sito", sito, "la pw è", pw
}



Ok! Per oggi abbiamo finito. La prossima volta affronteremo For e While.

P.S. Vi ricordo che l'indice al sequel "Un po' di AWK" lo trovate qui. Mentre la mia caverna è qui.

Nessun commento:

Posta un commento