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


4.5.4 Impostare FS dalla riga di comando

FS 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: , Precedente: , Su: Separatori di campo   [Contenuti][Indice]