Successivo: Intervalli, Precedente: regexp come criteri di ricerca, Su: Panoramica sui criteri di ricerca [Contenuti][Indice]
Qualsiasi espressione awk
può essere usata come un criterio di
ricerca awk
.
Il criterio di ricerca è verificato se il valore dell’espressione è diverso
da zero (se è un numero), o non nullo (se è una stringa).
L’espressione è ricalcolata ogni volta che la regola viene applicata a un
nuovo record in input. Se l’espressione usa campi come $1
, il suo
valore dipende direttamente dal contenuto del record in input appena letto;
altrimenti, dipende solo da quel che è accaduto fino a quel momento durante
l’esecuzione del programma awk
.
Le espressioni di confronto, che usano gli operatori di confronto descritti in
Tipi di variabile ed espressioni di confronto,
sono un tipo di criterio di ricerca usato frequentemente.
Anche le regexp, verificate o non verificate, sono tipi di espressioni molto frequenti.
L’operando a sinistra degli operatori ‘~’ e ‘!~’ è una stringa.
L’operando di destra è un’espressione regolare costante delimitata da
barre (/regexp/
) o qualsiasi espressione il cui valore come
stringa è usato come un’espressione regolare dinamica
(vedi la sezione Usare regexp dinamiche).
L’esempio seguente stampa il secondo campo di ogni record in input
il cui primo campo sia esattamente ‘li’:
$ awk '$1 == "li" { print $2 }' mail-list
(Il programma non stampa alcun output, perché nessuna persona ha come nome esattamente ‘li’.) Si veda la differenza con il seguente confronto di espressione regolare, che individua invece qualsiasi record il cui primo campo contenga ‘li’:
$ awk '$1 ~ /li/ { print $2 }' mail-list -| 555-5553 -| 555-6699
Una costante regexp usata come criterio di ricerca è anche un
caso speciale di criterio di ricerca costituito da un’espressione.
All’espressione /li/
viene assegnato il valore uno se ‘li’
viene trovato nel record in input corrente. Quindi, come criterio di ricerca,
/li/
individua tutti i record che contengono la stringa ‘li’.
Anche le espressioni booleane sono frequentemente usate come criteri di ricerca. Se un criterio di ricerca individua o no un record in input dipende dalla verifica delle sottoespressioni da cui è composto. Per esempio, il seguente comando stampa tutti i record in mail-list che contengono sia ‘edu’ che ‘li’:
$ awk '/edu/ && /li/' mail-list -| Samuel 555-3430 samuel.lanceolis@shu.edu A
Il seguente comando stampa tutti i record in mail-list che contengono ‘edu’ oppure ‘li’ (o entrambi, naturalmente):
$ awk '/edu/ || /li/' mail-list -| Amelia 555-5553 amelia.zodiacusque@gmail.com F -| Broderick 555-0542 broderick.aliquotiens@yahoo.com R -| Fabius 555-1234 fabius.undevicesimus@ucb.edu F -| Julie 555-6699 julie.perscrutabor@skeeve.com F -| Samuel 555-3430 samuel.lanceolis@shu.edu A -| Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R
Il seguente comando stampa tutti i record in mail-list che non contengono la stringa ‘li’:
$ awk '! /li/' mail-list -| Anthony 555-3412 anthony.asserturo@hotmail.com A -| Becky 555-7685 becky.algebrarum@gmail.com A -| Bill 555-1675 bill.drowning@hotmail.com A -| Camilla 555-2912 camilla.infusarum@skynet.be R -| Fabius 555-1234 fabius.undevicesimus@ucb.edu F
-| Martin 555-6480 martin.codicibus@hotmail.com A -| Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R
Le sottoespressioni di un’operatore booleano in un criterio di ricerca possono
essere espressioni regolari costanti, confronti, o qualsiasi altra espressione
di awk
. Gli intervalli di ricerca
non sono espressioni, e quindi non possono apparire all’interno di
criteri di ricerca booleani. Analogamente, i criteri di ricerca speciali
BEGIN
, END
, BEGINFILE
ed ENDFILE
,
che non corrispondono ad alcun record in input, non sono espressioni e non
possono essere usati all’interno di criteri di ricerca booleani.
L’ordine di precedenza dei differenti operatori che possono essere usati nei criteri di ricerca è descritto in Precedenza degli operatori (Come si nidificano gli operatori).
Successivo: Intervalli, Precedente: regexp come criteri di ricerca, Su: Panoramica sui criteri di ricerca [Contenuti][Indice]