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


4.5 Specificare come vengono separati i campi

Il separatore di campo, che è un carattere singolo o un’espressione regolare, controlla il modo in cui awk suddivide un record in input in campi. awk fa una scansione del record in input per trovare i caratteri che individuano il separatore; i campi sono il testo compreso tra i separatori trovati.

Nell’esempio che segue, usiamo il simbolo del punto elenco (•) per rappresentare gli spazi nell’output. Se il separatore di campo è ‘oo’, la seguente riga:

moo goo gai pan

è suddivisa in tre campi: ‘m’, ‘•g’, e ‘•gai•pan’. Notare gli spazi iniziali nei valori del secondo e del terzo campo.

Il separatore di campo è rappresentato dalla variable predefinita FS. I programmatori di shell notino: awk non usa il nome IFS che è usato dalle shell conformi a POSIX (come la Unix Bourne shell, sh, o Bash).

Il valore di FS si può cambiare nel programma awk con l’operatore di assegnamento, ‘=’ (vedi la sezione Espressioni di assegnamento). Spesso il momento giusto per far ciò è all’inizio dell’esecuzione prima che sia stato elaborato qualsiasi input, così che il primo record sia letto col separatore appropriato. Per far questo, si usa il modello di ricerca speciale BEGIN (vedi la sezione I criteri di ricerca speciali BEGIN ed END). Per esempio, qui impostiamo il valore di FS alla stringa ",":

awk 'BEGIN { FS = "," } ; { print $2 }'

Data la riga in input:

John Q. Smith, 29 Oak St., Walamazoo, MI 42139

questo programma awk estrae e stampa la stringa ‘•29•Oak•St.’.

A volte i dati in input contengono caratteri separatori che non separano i campi nel modo in cui ci si sarebbe atteso. Per esempio, il nome della persona dell’esempio che abbiamo appena usato potrebbe avere un titolo o un suffisso annesso, come:

John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139

Lo stesso programma estrarrebbe ‘•LXIX’ invece di ‘•29•Oak•St.’. Se ci si aspetta che il programma stampi l’indirizzo, si rimarrà sorpresi. La morale è quella di scegliere la struttura dei dati e i caratteri di separazione attentamente per evitare questi problemi. (Se i dati non sono in una forma facile da elaborare, può darsi che si possano manipolare con un programma awk separato.)


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