Successivo: Specificare lo standard input, Precedente: Opzioni, Su: Invocare Gawk [Contenuti][Indice]
Qualsiasi altro argomento sulla riga di comando è trattato normalmente come
file in input da elaborare nell’ordine con cui è specificato. Comunque, un
argomento che ha la forma var=valore
, assegna
il valore valore alla variabile var — non specifica affatto
un file. (Si veda Assegnare una variabile dalla riga di comando.) Nel seguente esempio,
count=1 è un assegnamento di variabile, non un nome-file:
awk -f programma.awk file1 count=1 file2
Incidentalmente, se davvero fosse necessario che awk
tratti un file dal nome count=1 (o qualsiasi altro file il cui
nome assomigli a un assegnamento di variabile), il nome di file in
questione andrà fatto precedere da ‘./’, come nell’esempio seguente:
awk -f programma.awk file1 ./count=1 file2
Tutti gli argomenti da riga di comando sono resi disponibili al programma
awk
nel vettore ARGV
(vedi la sezione Variabili predefinite). Opzioni da
riga di comando e il testo del programma (se presente) sono esclusi da
ARGV
. Tutti gli altri argomenti, compresi gli assegnamenti di
variabile, sono inclusi. Come ogni elemento di ARGV
viene elaborato,
gawk
imposta ARGIND
all’indice in ARGV
dell’elemento corrente. (gawk
mette a disposizione l’intera
riga di comando, ed è contenuta in PROCINFO["argv"]
;
vedi la sezione Variabili predefinite con cui awk
fornisce informazioni.)
La modifica di ARGC
e ARGV
nel proprio programma awk
consente di controllare come awk
elabora i file in input; questo è
descritto più dettagliatamente in Usare ARGC
e ARGV
.
La distinzione tra argomenti che sono nome-file e argomenti di assegnamento
di variabili vien fatta quando awk
deve aprire il successivo file di
input.
A quel punto dell’esecuzione, controlla la variabile nome-file per vedere se
è piuttosto un assegnamento di variabile; se così è, awk
imposta la
variabile invece di leggere un file.
Dunque, le variabili ricevono effettivamente i valori loro assegnati dopo che
tutti i file precedentemente specificati sono stati letti. In particolare, i
valori delle variabili assegnati in questo modo non sono disponibili
all’interno di una regola BEGIN
(vedi la sezione I criteri di ricerca speciali BEGIN
ed END
),
poiché tali regole vengono eseguite prima che awk
cominci a
esaminare la lista degli argomenti.
I valori delle variabili dati sulla riga di comando sono elaborati per rimuovere sequenze di protezione (vedi la sezione Sequenze di protezione). (a.b.)
In alcune implementazioni di awk
molto vecchie, quando un
assegnamento di variabile capitava prima di un qualsiasi nome-file,
l’assegnamento avveniva prima che fosse stata eseguita la regola
BEGIN
. Il comportamento di awk
era in questo modo
ambiguo; alcuni assegnamenti da riga di comando erano disponibili
all’interno della regola BEGIN
, mentre altri no. Sfortunatamente,
alcune applicazioni finivano per essere dipendenti da questa
“funzionalità”. Quando awk
fu modificato per essere più
coerente, fu aggiunta l’opzione -v a beneficio delle
applicazioni che dipendevano dal vecchio comportamento.
La funzionalità dell’assegnamento di variabile è molto utile per assegnare
valori a variabili come RS
, OFS
, e ORS
, che controllano i
formati di input e di output, prima di effettuare la scansione dei file-dati.
È utile anche per effettuare passaggi multipli su uno stesso
file-dati. Per esempio:
awk 'pass == 1 { istruzioni pass 1 } pass == 2 { istruzioni pass 2 }' pass=1 mydata pass=2 mydata
Una volta disponibile la funzionalità per assegnare una variabile, l’opzione
-F per impostare il valore di FS
non è più strettamente
necessaria. Rimane per compatibilità all’indietro.
Successivo: Specificare lo standard input, Precedente: Opzioni, Su: Invocare Gawk [Contenuti][Indice]