Successivo: Dimensione costante, Precedente: Cambiare i campi, Su: Leggere file [Contenuti][Indice]
• Separatori di campo di default | Come di solito sono separati i campi. | |
• Separare campi con regexp | Usare regexp come separatori. | |
• Campi di un solo carattere | Fare di ogni carattere un campo separato. | |
• Separatori campo da riga di comando | Assegnare FS dalla riga di
comando.
| |
• Campo intera riga | Far sì che la riga intera sia un campo solo. | |
• Sommario sulla separazione campi | Alcuni punti finali e una tavola di sommario. |
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: Dimensione costante, Precedente: Cambiare i campi, Su: Leggere file [Contenuti][Indice]