Successivo: Campi non costanti, Precedente: Record, Su: Leggere file [Contenuti][Indice]
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 ‘li’ nell’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: Campi non costanti, Precedente: Record, Su: Leggere file [Contenuti][Indice]