AWK

awk

E' un mini-linguaggio, inventato da Aho, Weinberger e Kernighan (da cui il nome).

  • Scandisce un file, cerca linee con match ad un'espressione regolare ed esegue su di esse uno o più comandi.
  • Opzionalmente esegue comandi prima dell'inizio e dopo la fine della scansione del file.
  • Possiede numerose variabili predefinite e numerose funzioni

Nella sua semplicità è una piccola meraviglia. Assomiglia come sintassi al Linguaggio C, ma è molto meno formale, ed è un linguaggio di scripting, non compilato.

Sintassi:

awk [opzioni}ì] 'BEGIN{comandi}/pattern/{comandi}END{comandi}' file
awk '{comandi}' file
awk '/pattern/{comandi}' file
awk 'END{comand}' file
comando | awk '...'
awk -f procedura file

Esempio.

Sommare lo spazio occupato dai file di una directory, che non siano sottodirectories.

ls -l | awk 'BEGIN{tot=0}/^[-]/{tot+=$5}END{print tot}'

Dove $5 è il quinto campo di un rapporto ls -l. In awk il separatore di campo è un qualsiasi numero di caratteri 'spazio', 'tab' e 'newline'. Se dovessimo farlo con cut dovremmo contare le colonne.

La variabile predefinita $1 sta per il primo campo sulla linea corrente, $2 il secondo, e così via. $0 è l'intera linea corrente. Quindi:

awk '{print $0}` file

è lo stesso di cat file.

Awk è corredato di un insieme cospicuo di funzioni matematiche. Stampare il seno di un angolo di un radiante:

awk '{print sin (1)}' < /dev/null

Qui il trucco è la ridirezione da /dev/null, poichè awk si aspetta un file in input.

I programmi awk si possono inserire in files di procedura, se lunghi, e richiamare all'esecuzione. Per esempio il file vi owner.awk (notare che se il file ha l'estensione awk, il vim lo riconosce e da la colorazione sintattica giusta):

#!/bin/awk -f
BEGIN     { print "File\tOwner" }
        { print $9, "\t", \
        $3} 
END       { print " - DONE -" }

Lo si esegue con:

ls -l | awk -f owner.awk

results matching ""

    No results matching ""