Successivo: Campo intera riga, Precedente: Campi di un solo carattere, Su: Separatori di campo [Contenuti][Indice]
FS
dalla riga di comandoFS
può essere impostata sulla riga di comando. Per far questo si usa
l’opzione -F. Per esempio:
awk -F, 'programma' i-file-di-input
imposta FS
al carattere ‘,’. Si noti che l’opzione richiede
un carattere maiuscolo ‘F’ anziché minuscolo ‘f’. Quest’ultima
opzione (-f) serve a specificare il file contenente un programma
awk
.
Il valore usato per l’argomento di -F è elaborato esattamente nello
stesso modo degli assegnamenti alla variabile predefinita FS
. Qualsiasi
carattere speciale nel separatore di campo dev’essere protetto in modo
appropriato. Per esempio, per usare un ‘\’ come separatore di campo
sulla riga di comando, si dovrebbe battere:
# equivale a FS = "\\" awk -F\\\\ '…' file …
Poiché ‘\’ è usato nella shell per proteggere caratteri, a awk
arriva ‘-F\\’. Quindi awk
elabora ‘\\’ per caratteri di
protezione (vedi la sezione Sequenze di protezione), producendo alla fine
un unico ‘\’ da usare come separatore di campo.
Come caso particolare, in modalità di compatibilità
(vedi la sezione Opzioni sulla riga di comando),
se l’argomento di -F è ‘t’, FS
è impostato al
carattere di tabulazione. Se si immette ‘-F\t’ nella
shell, senza che sia tra apici, ‘\’ viene cancellata,
così awk
conclude che si vuole realmente che i campi siano separati da tabulazioni e
non da delle ‘t’. Si usi ‘-v FS="t"’ o ‘-F"[t]"’ sulla riga di
comando se si vuole separare i campi con delle ‘t’.
Quando non si è in modalità di compatibilità si deve usare ‘-F '\t'’ per
specificare che le tabulazioni separano i campi.
Come esempio, usiamo un file di programma awk
chiamato
edu.awk che contiene il criterio di ricerca /edu/
e l’azione
‘print $1’:
/edu/ { print $1 }
Impostiamo inoltre FS
al carattere ‘-’ ed eseguiamo il programma
sul file mail-list. Il seguente comando stampa un elenco dei nomi
delle persone che lavorano all’università o che la frequentano, e le prime tre
cifre dei loro numeri di telefono:
$ awk -F- -f edu.awk mail-list -| Fabius 555 -| Samuel 555 -| Jean
Si noti la terza riga di output. La terza riga nel file originale è simile a questa:
Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R
Il ‘-’ che fa parte del nome della persona è stato usato come separatore di campo, al posto del ‘-’ presente nel numero di telefono, che ci si aspettava venisse usato. Questo lascia intuire il motivo per cui si deve stare attenti nella scelta dei separatori di campo e di record.
Forse l’uso più comune di un solo carattere come separatore di campo avviene quando si elabora il file delle password di un sistema Unix. Su molti sistemi Unix, ogni utente è descritto da un elemento nel file delle password del sistema, che contiene una riga singola per ogni utente. In queste righe le informazioni sono separate da dei caratteri ":". Il primo campo è il nome di login dell’utente e il secondo è la password dell’utente criptata o oscurata (una password oscurata è indicata dalla presenza di una sola ‘x’ nel secondo campo). Una riga nel file delle password potrebbe essere simile a questa:
arnold:x:2076:10:Arnold Robbins:/home/arnold:/bin/bash
Il seguente programma esamina il file delle password di sistema e stampa le voci relative agli utenti il cui nome completo non è presente nel file:
awk -F: '$5 == ""' /etc/passwd
Successivo: Campo intera riga, Precedente: Campi di un solo carattere, Su: Separatori di campo [Contenuti][Indice]