Successivo: , Precedente: , Su: Leggere file   [Contenuti][Indice]


4.2 Un’introduzione ai campi

Quando awk legge un record in input, il record è automaticamente analizzato o separato da awk in "pezzi" chiamati campi. Per default, i campi sono separati da spazi vuoti, come le parole in una riga stampata. Uno spazio vuoto in awk è qualsiasi stringa composta da uno o più spazi, segni di tabulazione o ritorni a capo; altri caratteri, come interruzione di pagina, tabulazione verticale, etc., che sono considerati spazi vuoti in altri linguaggi, non sono considerati tali da awk.

Lo scopo dei campi è quello di rendere più conveniente per l’utente far riferimento a questi frammenti dei record. Non è necessario usarli — si può operare sull’intero record, se si vuole — ma i campi sono ciò che rende così potenti dei semplici programmi awk.

Si usa il simbolo del dollaro (‘$’) per far riferimento a un campo in un programma awk, seguito dal numero del campo desiderato. Quindi, $1 si riferisce al primo campo, $2 al secondo, e così via. (Diversamente che nelle shell Unix, i numeri di campo non sono limitati a una sola cifra; $127 è il centoventisettesimo campo nel record.) Per esempio, supponiamo che la seguente sia una riga in input:

Questo pare essere un esempio proprio carino.

Qui il primo campo, o $1, è ‘Questo’, il secondo campo, o $2, è ‘pare’, e via dicendo. Si noti che l’ultimo campo, $7, è ‘carino.’. Poiché non ci sono spazi tra la ‘o’ e il ‘.’, il punto è considerato parte del settimo campo.

NF è una variabile predefinita il cui valore è il numero di campi nel record corrente. awk aggiorna automaticamente il valore di NF ogni volta che legge un record. Indipendentemente da quanti campi ci possano essere, l’ultimo campo in un record può essere rappresentato da $NF. Così, $NF è lo stesso di $7, che è ‘carino.’. Se si cerca di far riferimento a un campo oltre l’ultimo (come $8 quando il record ha solo sette campi), si ottiene la stringa nulla. (Se usato in un’operazione numerica si ottiene zero.)

L’uso di $0, che sarebbe come un riferimento al campo “numero zero”, è un caso particolare: rappresenta l’intero record in input. Si usa quando non si è interessati a un campo specifico. Vediamo qualche altro esempio:

$ awk '$1 ~ /li/ { print $0 }' mail-list
-| Amelia       555-5553     amelia.zodiacusque@gmail.com    F
-| Julie        555-6699     julie.perscrutabor@skeeve.com   F

Questo esempio stampa ogni record del file mail-list il cui primo campo contiene la stringa ‘li’.

Per converso, il seguente esempio cerca ‘linell’intero record e stampa il primo e l’ultimo campo di ogni record in input per cui è stata trovata una corrispondenza:

$ awk '/li/ { print $1, $NF }' mail-list
-| Amelia F
-| Broderick R
-| Julie F
-| Samuel A

Successivo: , Precedente: , Su: Leggere file   [Contenuti][Indice]