Successivo: Sommario di getline, Precedente: Getline variabile coprocesso, Su: Getline [Contenuti][Indice]
getline
Qui 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]