Salve!
Ho potuto constatare, girando tra i vari blog, anche stranieri, che, quando l'argomento del post è estremamente semplice, si suole usare la seguente dicitura:
"Attenzione, post per neofiti!"
Bene! Ora cerchiamo di fare qualche operazione con AWK.
Ometto del tutto la teoria (forse non è necessaria) e mi limito a fare qualche operazione semplice semplice.
Partiamo da un file che contenga il seguente testo:
Atalanta Genoa 1 1
Cagliari Roma 2 2
Catania Fiorentina 0 2
Chievo Inter 2 2
Lazio Udinese 1 3
Lecce Napoli 1 1
Milan Juventus 1 1
Sampdoria Reggina 5 0
Siena Palermo 1 0
Torino Bologna 1 1
Salviamolo nella directory Documenti e nominiamolo file.txt
Le operazioni che andremo a compiere avranno come oggetto proprio il testo di cui sopra.
A questo punto iniziamo a porci qualche meta:
1. Stampare un elenco delle sole squadre in trasferta.
2. Stampare un elenco delle sole squadre che giocano in casa.
3. Stampare un elenco di tutte le partite il cui risultato è stato 1 a 1
4. Stampare un elenco delle partite il cui risultato è stato un 2 a 2
5. Stampare un elenco delle partite con vittoria fuori casa
6. Stampare un elenco delle partite con vittoria in casa
7. Stampare un elenco delle squadre che giocano in casa il cui nome inizia con la lettera c.
8. Stampare un elenco di tutte le squadre il cui nome conta più di 6 caratteri.
E fermiamoci qui.
Finora abbiamo solo un file di testo,"file.txt"
Ora creeremo una serie di script semplici che cercheranno di dare una risposta ai nostri quesiti.
Sempre nella cartella Documenti creiamo un altro file di testo e costruiamo il primo script.
Sul file creato incolliamo il seguente testo:
#!/usr/bin/awk -f
{print $2}
nominiamolo "test1"
Ora apriamo un terminale e spostiamoci nella directory Documenti
cd Documenti
Rendiamo eseguibile il nostro script
chmod +x test1
e, restando in Documenti, lanciamolo così
./test file.txt
Eccone il risultato:
[bit3lux@bit Documenti]$ ./test1 file.txt
Genoa
Roma
Fiorentina
Inter
Udinese
Napoli
Juventus
Reggina
Palermo
Bologna
Passiamo al secondo quesito: Elenco delle sole squadre che giocano in casa.
Creiamo il secondo script (che nomineremo test2)
#!/usr/bin/awk -f
{print $1}
Rendiamo eseguibile e lanciamolo.
Il risultato sarà il seguente:
[bit3lux@bit Documenti]$ ./test2 file.txt
Atalanta
Cagliari
Catania
Chievo
Lazio
Lecce
Milan
Sampdoria
Siena
Torino
Passiamo al terzo quesito: Elenco di tutte le partite il cui risultato è stato 1 a 1.
Come al solito creamo uno script (test3) con il seguente testo:
#!/usr/bin/awk -f
($3==1 && $4==1) {print $0}
Rendiamolo eseguibile e lanciamolo come al solito.
Risultato:
[bit3lux@bit Documenti]$ ./test3 file.txt
Atalanta Genoa 1 1
Lecce Napoli 1 1
Milan Juventus 1 1
Torino Bologna 1 1
Passiamo al quarto quesito: Elenco delle partite il cui risultato è stato un 2 a 2
Creiamo un altro script, sempre nella cartella documenti, che nomineremo test4
#!/usr/bin/awk -f
($3==2 && $4==2) {print $0}
Risultato:
[bit3lux@bit Documenti]$ ./test4 file.txt
Cagliari Roma 2 2
Chievo Inter 2 2
Passiamo al quinto quesito: Elenco delle partite con vittoria fuori casa.
#!/usr/bin/awk -f
($3<$4) {print $0}
Risultato:
[bit3lux@bit Documenti]$ ./test5 file.txt
Catania Fiorentina 0 2
Lazio Udinese 1 3
Sesto quesito: Elenco delle partite con vittoria in casa.
#!/usr/bin/awk -f
($3>$4) {print $0}
Solito discorso: creare script, renderlo eseguibile e lanciarlo (non lo dirò più!)
Risultato:
[bit3lux@bit Documenti]$ ./test6 file.txt
Sampdoria Reggina 5 0
Siena Palermo 1 0
Settimo quesito: elenco delle squadre che giocano in casa il cui nome inizia con la C.
#!/usr/bin/awk -f
($1~/^C/) { print $1 }
Risultato:
[bit3lux@bit Documenti]$ ./test7 file.txt
Cagliari
Catania
Chievo
Passiamo all'ultimo quesito: Elenco delle squadre fuori casa il cui nome conta più di 6 caratteri.
#!/usr/bin/awk -f
(length($2)>6) {print $2}
Risultato:
[bit3lux@bit Documenti]$ ./test8 file.txt
Fiorentina
Udinese
Juventus
Reggina
Palermo
Bologna
Per oggi è tutto, ma su awk ci ritornerò volentieri.
Dimenticavo, solo una piccola precisazione, anche se si è intuita:
$1, $2, $3 e $4, nell'esempio fatto, stanno ad indicare le colonne (squadre in casa, squadre fuori casa, i gol delle squadre in casa, i gol delle squadre fuori casa); $0, invece, indica l'insieme delle righe; infatti, se lancio il seguente script
#!/usr/bin/awk -f
{print $0}
mi stamperà tutto il documento.
Ciao :)
OK! un buon inizio ma:
RispondiElimina1) si potrebbe approfondire;
2) AWK non è mai per neofiti, imho.
O è solo una maldicenza quella del punto 2. Io pr esempio lo amo da decenni, come se fossimo sposati.
Dai Bit3Lux l'argomento merita approfondimenti.
Hai perfettamente ragione...ma ancora siamo troppo in superficie...AWk è molto ma molto di più... :)) Facilissimo non è ma, nell'elaborazione dei testi, è insuperabile.
Elimina