Successivo: , Precedente: , Su: Panoramica sui criteri di ricerca   [Contenuti][Indice]


7.1.2 Espressioni come criteri di ricerca

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 contengali’:

$ 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 ‘eduoppureli’ (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: , Precedente: , Su: Panoramica sui criteri di ricerca   [Contenuti][Indice]