IMC!


Contenuti


Foto

 







Curiosando...
Novita  Novità Link  Link Blog  Blog English  Español 
Esempi di script in AWK

In questa sezione saranno presentati dei brevi script nel liguaggio AWK. Nonostante siano molto semplici, possono essere utili per capire la logica che guida questo linguaggio di scripting, un po diversa da linguaggi di programmazione più noti. Per avere informazioni di carattere generale su AWK, potete leggere la Voce AWK su Wikipedia.
AWK è un linguaggio interpretato volto alla processazione di file di testo. Per l'interprete, un file di testo è una grande tabella. Ciascuna riga del testo è una riga della tabella (detta record). Ciascuna parola circondata da spazi è una colonna di tale tabella, detta field (o campo). Quando un file di testo viene dato in ingresso a uno script AWK, succede quanto segue:
  1. L'interprete AWK apre automaticamente il file.
  2. L'interprete AWK scorre tutti i record (righe) del file di testo, e applica le regole di modifica indicate dai comandi AWK. Sottolineiamo che il file viene scorso automaticamente, il programmatore non deve implementare nessun ciclo for, while, foreach.
  3. L'interprete AWK salva il file e lo chiude.
Come si può intuire, è possibile processare grandi quantità di dati scrivendo semplici regole, risparmiando il tempo necessario a implementare operazioni come l'apertura e chiusura dei file, o la lettura e scrittura di righe.
Altra grande semplificazione di AWK è l'assenza di variabili tipizzate: ciascuna variabile può essere indifferentemente trattata come testo o numero.

La struttura di un comando AWR per processare un record è:

(condizione) {azione}

  • Condizione rappresenta una condizione che individua un record o una porzione di record sul quale si desidera agire.
  • Azione rappresenta l'azione da eseguire sul record o porzione di record scelto.
Nei successivi file di esempio faremo sempre riferimento a un file di testo contenente l'elenco delle nazioni con superficie, popolazione, continente:

USSR            86250   262     Asia
USA             3615    219     Nord America
China           3692    866     Asia
Canada          3852    24      Nord America
Brazil          3286    116     South America
Australia       2968    14      Oceania
India           1269    637     Asia
Argentina       1072    26      South America
Sudan           968     19      Africa
Italy           920     60      Europe
Angola          1246    12      Africa
Austria         83      8       Europe
Spain           504     45      Europe
 

Selezionare i campi
Questo esempio mostra come vengono identificati i campi di ciascun record: tramite numeri preceduti dal $ (proprio come avviene per i parametri passati dalla riga di comando nella Bash).

#!/usr/bin/awk -f
# Questo script stampa solo nazioni e continenti

{print $1, $4}
 

Condizioni e variabili
Questi esempi mostrano come sia possibile inserire condizioni di carattere numerico e che fanno uso di funzioni complesse. Notiamo come non esista tipizzazione in AWK: la stringa letta, se rappresenta un numero, può essere automaticamente convertita e usata come numero.

#!/usr/bin/awk -f
# Questo script stampa tutti i dati relativi solo alle
# nazioni con più di 50 milioni di persone.

( $3 > 50 ) { print $0 }



#!/usr/bin/awk -f
# Questo script stampa tutti i dati relativi solo alle
# nazioni il cui nome è più lungo di 5 caratteri

( length($1)>=5 ) { print $0 }
 

Espressioni regolari
Questi esempi mostrano come sia possibile implementare le espressioni regolai in AWK. Da notare la presenza delle barre / per delimitare l'espressione regolare, e la presenza della ˜ per riferire l'espressione regolare a un solo campo anzichè a tutto il record.

#!/usr/bin/awk -f
# Questo script stampa tutti i dati relativi solo alle
# nazioni asiatiche

(/.Asia/) {print $0}
 



#!/usr/bin/awk -f
# Questo script stampa tutti i dati relativi solo alle
# nazioni europee

( /Europe/) { print $0 }
 



#!/usr/bin/awk -f
# Questo script stampa tutti i dati relativi solo alle
# nazioni inizianti per A

( $1~/A./ ) { print $0 }
 

Condizioni composte
Nei seguenti esempi possiamo vedere come sia possibile combinare più condizioni tramite degli operatori booleani del tutto simili a quelli implementati nel linguaggio C.

#!/usr/bin/awk -f
# Questo script stampa tutti i dati relativi solo alle
# nazioni con più di 50 milioni di persone e una
# superficie di più di 2 milioni di km quadrati

( $3 > 50 && $2 > 2000) { print $0 }
 



#!/usr/bin/awk -f
# Questo script stampa tutti i dati relativi solo alle
# nazioni africane che iniziano per A

( $0~/Africa/ && $1~/^A/ ) { print $0 }
 



#!/usr/bin/awk -f
# Questo script stampa tutti i dati relativi solo alle
# nazioni europee il cui nome inzia per A o S

( $0~/Europe/ && ($1~/^A/ || $1~/^S/) ) { print $0 }
 







Commenti

1 - AnonimoSab 16 Lug 2016 - 20:30:29  

Grazie !


2 - AnonimoVen 02 Mag 2014 - 10:58:02  

Eccellente articolo! Grazie mille.


3 - AnonimoSab 17 Nov 2012 - 10:58:28  

complimenti, mi è stato utilissimo per iniziare


4 - badreGio 10 Mar 2011 - 14:47:33  

grazie mille
ottimo!!!!


5 - tonyfire   SitoVen 06 Ago 2010 - 01:09:41  

Bel post, non c'è che dire :) se vuoi dare un'occhiata al mio blog, all'indirizzo ttp://tonyfire.altervista.org/2010/08/04/come-trovare-i-file-piu-voluminosi-con-find-awk-e-un-po-di-fantasia/ con un esempio pratico cerco di spiegare come usare insieme a find awk....Ogni consiglio e' ben accetto, saluti.


Scrivi un commento

Pui scrivere quì sotto un commento all'articolo che hai appena letto. Non sono abilitate smile, immagini e link. La lunghezza massima del commento è 4000 caratteri. La buona educazione è benvenuta, tutti i commenti offensivi saranno cancellati.

Your comment (lascia bianco!):
Utente (max 25 caratteri, obbligatorio)
Sito web (max 255 caratteri, facoltativo)
e-Mail (max 255 caratteri, facoltativa, non sarà pubblicata) Your opinion (lascia bianco!):
Commento (max 4000 caratteri, obbligatorio):





Valid HTML 4.01 Transitional
E-Mail - 103.52 ms

Valid HTML 4.01 Transitional