Successivo: , Precedente: , Su: Invocare Gawk   [Contenuti][Indice]


2.3 Altri argomenti della riga di comando

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 Opzioni di assegnamento.) Nel seguente esempio, count=1 è un assegnamento di variabile, non un nome-file:

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 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.

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 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 BEGIN/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 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 un o stesso file-dati. Per esempio:

awk 'pass == 1  { pass 1 stuff }
     pass == 2  { pass 2 stuff }' 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: , Precedente: , Su: Invocare Gawk   [Contenuti][Indice]