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 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: , Precedente: , Su: Invocare Gawk   [Contenuti][Indice]