Precedente: , Su: Separatori di campo   [Contenuti][Indice]


4.5.6 Sommario sulla separazione dei campi

È importante ricordare che quando si assegna una costante stringa come valore di FS, questa subisce una normale elaborazione di stringa da parte di awk. Per esempio, con Unix awk e gawk, l’assegnamento ‘FS = "\.."’ assegna la stringa di caratteri ".." a FS (la barra inversa è tolta). Questo crea un’espressione regolare che significa “i campi sono separati da ricorrenze di due caratteri qualsiasi”. Se invece si vuole che i campi siano separati da un punto seguito da un qualsiasi carattere singolo, si deve usare ‘FS = "\\.."’.

Il seguente elenco riassume come i campi vengono divisi, in base al valore di FS (‘==’ significa “è uguale a”):

FS == " "

I campi sono separati da serie di spazi vuoti. Gli spazi vuoti iniziale e finale sono ignorati. Questo è il comportamento di default.

FS == qualsiasi altro carattere singolo

I campi sono separati da ogni ricorrenza del carattere. Ricorrenze successive multiple delimitano campi vuoti, e lo stesso fanno le ricorrenze iniziali e finali del carattere. Il carattere può essere anche un metacarattere di espressione regolare, che non è necessario proteggere.

FS == espressione regolare

I campi sono separati da ricorrenze di caratteri che corrispondono alla espressione regolare. Corrispondenze iniziali e finali della regexp delimitano campi vuoti.

FS == ""

Ogni sinngolo carattere nel record diventa un campo separato. (Questa è un’estensione comune; non è specificata dallo standard POSIX.)

FS e IGNORECASE

La variabile IGNORECASE (vedi la sezione Variabili predefinite modificabili per controllare awk) influisce sulla divisione del campo solo quando il valore di FS è un’espressione regolare. Non ha nessun effetto quando FS è un singolo carattere, anche se quel carattere è una lettera. Quindi, nel seguente codice:

FS = "c"
IGNORECASE = 1
$0 = "aCa"
print $1

L’output è ‘aCa’. Se si vuol veramente dividere i campi su un carattere alfabetico ignorandone il maiuscolo/minuscolo, si deve usare un’espressione regolare che lo farà in automatico (p.es., ‘FS = "[c]"’). In questo caso, IGNORECASE avrà effetto.


Precedente: , Su: Separatori di campo   [Contenuti][Indice]