Successivo: Sommario di getline, Precedente: Getline variabile coprocesso, Su: Getline [Contenuti][Indice]
getlineQui sono elencate diverse considerazioni su getline
da tener presenti:
getline cambia il valore di $0 e NF,
awk non salta automaticamente all’inizio del
programma per iniziare a provare il nuovo record su ogni criterio di ricerca.
Comunque, il nuovo record viene provato su ogni regola successiva.
awk limitano a una sola il
numero di pipeline che un programma awk può tenere aperte.
In gawk, non c’è questo limite.
Si possono aprire tante pipeline (e coprocessi) quante ne permette il
sistema operativo in uso.
getline, senza
una ridirezione, all’interno di una regola BEGIN. Poiché una
getline non ridiretta legge dai file-dati specificati nella riga di
comando, il primo comando getline fa sì che awk imposti
il valore di FILENAME. Normalmente, FILENAME non ha ancora un
valore all’interno delle regole BEGIN, perché non si è ancora
iniziato a elaborare il
file-dati della riga di comando.
(a.b.)
(Si veda I criteri di ricerca speciali BEGIN ed END;
e vedi la sezione Variabili predefinite con cui awk fornisce informazioni.)
FILENAME con getline
(‘getline < FILENAME’)
può essere fonte di
confusione. awk apre un flusso separato di input, diverso dal
file in input corrente. Comunque, poiché non si usa una variabile,
$0 e NF vengono aggiornati. Se si sta facendo questo, è
probabilmente per sbaglio, e si dovrebbe rivedere quello che si sta cercando
di fare.
getline,
contiene una tabella che sintetizza le
varianti di getline e le variabili da esse modificate.
È degno di nota che le varianti che non usano la ridirezione
possono far sì che FILENAME venga aggiornato se chiedono ad
awk di iniziare a leggere un nuovo file in input.
awk si comportano in modo diverso quando trovano la
fine-del-file [EOF]. Alcune versioni non valutano l’espressione; molte
versioni (compreso gawk) lo fanno. Si veda un esempio, gentilmente
fornito da Duncan Moore:
BEGIN {
system("echo 1 > f")
while ((getline a[++c] < "f") > 0) { }
print c
}
Qui l’effetto secondario è ‘++c’. Se viene trovata la fine del file
prima di assegnare l’elemento a, c è incrementato o no?
gawk tratta getline come una chiamata di funzione, e valuta
l’espressione ‘a[++c]’ prima di cercare di leggere da f.
Comunque, alcune versioni di awk valutano l’espressione solo
se c’è un valore di stringa da assegnare.
Successivo: Sommario di getline, Precedente: Getline variabile coprocesso, Su: Getline [Contenuti][Indice]