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


4.5.5 Fare di una riga intera un campo solo

Occasionalmente, è utile trattare l’intera riga in input come un solo campo. Questo si può fare facilmente e in modo portabile semplicemente impostando FS a "\n" (un ritorno a capo).22

awk -F'\n' 'programma' file …

In questo caso, $1 coincide con $0.

Cambiare FS non incide sui campi

Secondo lo standard POSIX, si suppone che awk si comporti come se ogni record sia stato diviso in campi nel momento in cui è stato letto. In particolare, ciò vuol dire che se si cambia il valore di FS dopo che un record è stato letto, il valore dei campi (cioé la loro suddivisione) sarà ancora quello ottenuto usando il precedente valore di FS, non quello nuovo.

Comunque, molte delle più vecchie implementazioni di awk non funzionano in questo modo. Invece, rimandano la divisione dei campi fino a quando si fa effettivamente riferimento a un campo. I campi sono divisi usando il valore corrente di FS! (a.b.) Questo comportamento può essere di difficile identificazione. Il seguente esempio illustra la differenza tra i due metodi. Lo script

sed 1q /etc/passwd | awk '{ FS = ":" ; print $1 }'

normalmente stampa:

-| root

su un’implementazione non standard di awk, mentre gawk stampa l’intera prima riga del file, qualcosa come:

root:x:0:0:Root:/:

(Il comando sed23 appena visto stampa solo la prima riga di /etc/passwd.)


Note a piè di pagina

(22)

Grazie ad Andrew Schorr per questo suggerimento.

(23)

Il programma di utilità sed è un “editore di flusso”. Anche il suo comportamento è definito dallo standard POSIX.


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