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


2.2 Opzioni sulla riga di comando

Le opzioni sono precedute da un trattino e consistono in un unico carattere. Le opzioni estese in stile GNU sono precedute da un doppio trattino e consistono in una parola chiave. La parola chiave può essere abbreviata, a condizione che l’abbreviazione identifichi univocamente l’opzione. Se l’opzione prevede un argomento, la parola chiave è immediatamente seguita da un segno di uguale (‘=’) e dal valore dell’argomento, oppure la parola chiave e il valore dell’argomento sono separati da spazio bianco (spazi o caratteri TAB). Se un’opzione con un valore viene immessa più di una volta, l’ultimo valore è quello che conta.

Ogni opzione estesa di gawk ha una corrispondente opzione breve in stile POSIX. Le opzioni estese e brevi sono intercambiabili in tutti i contesti. L’elenco seguente descrive le opzioni richieste dallo standard POSIX:

-F fs
--field-separator fs

Imposta la variabile FS a fs (vedi la sezione Specificare come vengono separati i campi).

-f file-sorgente
--file file-sorgente

Legge il sorgente del programma awk da file-sorgente anziché prenderlo dal primo argomento che non è un’opzione. Quest’opzione può essere data più volte; il programma awk è formato dalla concatenazione del contenuto di ogni file-sorgente specificato.

I file specificati dall’opzione -f sono considerati appartenere allo spazio-dei-nomi ‘"awk" (@namespace "awk")’ a inizio programma. Vedi la sezione Come cambiare lo spazio-dei-nomi, per ulteriori informazioni riguardo a questa funzionalità avanzata.

-v var=val
--assign var=val

Imposta la variabile var al valore val prima che inizi l’esecuzione del programma. Tali valori di variabile sono disponibili all’interno della regola BEGIN (vedi la sezione Altri argomenti della riga di comando).

L’opzione -v può impostare una sola variabile per volta, ma può essere usata più di una volta, impostando ogni volta una variabile differente, in questo modo: ‘awk -v pippo=1 -v pluto=2’.

ATTENZIONE: Usare -v per impostare valori di variabili predefinite può condurre a risultati sorprendenti. awk reimposterà i valori di quelle variabili secondo le sue necessità, anche ignorando eventuali valori iniziali che possono essere stati assegnati.

-W gawk-opt

Fornisce un’opzione specifica dell’implementazione. Questa è la convenzione POSIX per fornire opzioni specifiche dell’implementazione. Queste opzioni hanno anche una corrispondente opzione estesa scritta in stile GNU. Si noti che le opzioni estese possono essere abbreviate, sempre che le abbreviazioni siano univoche. L’elenco completo delle opzioni specifiche di gawk è riportato di seguito.

--

Segnale della fine delle opzioni da riga di comando. I seguenti argomenti non sono trattati come opzioni anche se iniziano con ‘-’. Questa interpretazione di -- segue le convenzioni POSIX per l’analisi degli argomenti.

È utile se si hanno nomi-file che iniziano con ‘-’, o negli script di shell, se si hanno nomi-file che devono essere specificati dall’utente che potrebbero iniziare con ‘-’. È utile anche per passare opzioni al programma awk; si veda Elaborare opzioni specificate sulla riga di comando.

L’elenco che segue descrive le opzioni specifiche di gawk:

-b
--characters-as-bytes

Fa sì che gawk tratti tutti i dati in input come caratteri di un solo byte. In aggiunta, tutto l’output scritto con print o printf viene trattato come composto da caratteri contenuti in un solo byte.

Normalmente, gawk segue lo standard POSIX e cerca di elaborare i suoi dati di input in accordo con la localizzazione corrente (vedi la sezione Il luogo fa la differenza). Questo spesso può comportare la conversione di caratteri multibyte in caratteri estesi (internamente), e può creare problemi o confusione se i dati di input non contengono caratteri multibyte validi. Quest’opzione è una maniera facile di dire a gawk: “Giù le mani dai miei dati!”.

-c
--traditional

Specifica la modalità di compatibilità, nella quale le estensioni GNU al linguaggio awk sono disabilitate; in questo modo gawk si comporta proprio come la versione di BWK awk.

Vedi la sezione Estensioni di gawk non in POSIX awk, che riassume le estensioni. Si veda anche Compatibilità all’indietro e debug.

-C
--copyright

Stampa la versione ridotta della General Public License ed esce.

-d[file]
--dump-variables[=file]

Stampa una lista ordinata di variabili globali, i loro tipi, e i valori finali in file. Se non viene fornito alcun file, stampa questa lista in un file chiamato awkvars.out nella directory corrente. Non sono consentiti spazi tra -d e file, se file viene specificato.

Avere una lista di tutte le variabili globali è un buon modo per cercare refusi nei propri programmi. Si può usare quest’opzione anche se si ha un grosso programma con tantissime funzioni, e si vuol essere sicuri che le funzioni non usino inavvertitamente variabili globali che sarebbero dovute essere locali (questo è un errore particolarmente facile da fare con nomi di variabile semplici come i, j, etc.).

-D[file]
--debug[=file]

Abilita l’esecuzione del debug di programmi awk (vedi la sezione Introduzione al debugger di gawk). Per default, il debugger legge i comandi interattivamente dalla tastiera (standard input). L’argomento opzionale file consente di specificare un file con una lista di comandi per il debugger da eseguire in maniera non interattiva. Non sono consentiti spazi tra -D e file, se file viene indicato.

-e testo-del-programma
--source testo-del-programma

Fornisce del codice sorgente nel testo-del-programma. Quest’opzione consente di combinare il codice sorgente contenuto in file col codice sorgente immesso sulla riga di comando. Questo è particolarmente utile quando si hanno funzioni di libreria che si vogliono usare dai programmi da riga di comando (vedi la sezione Ricerca di programmi awk in una lista di directory.).

Si noti che gawk elabora ogni stringa come se fosse terminata da un carattere di ritorno a capo (anche se non è questo il caso). Ciò facilita la costruzione del programma completo.

ATTENZIONE: Prima della versione 5.0, non era necessario che ogni testo-di-programma costituisse un’unità sintattica completa. P.es., il codice che segue funzionava:

$ gawk -e 'BEGIN { a = 5 ;' -e 'print a }'
-| 5

Comunque ciò non è più possibile. Se c’è qualche script che utilizza tale possibilità, è necessario modificarlo.

Il motivo di ciò è che ogni testo-di-programma è considerato appartenere allo spazio di nomi ‘"awk" (@namespace "awk")’ a inizio programma. Vedi la sezione Come cambiare lo spazio-dei-nomi, per ulteriori informazioni.

-E file
--exec file

Simile a -f, legge il testo del programma awk da file. Ci sono due differenze rispetto a -f:

Quest’opzione è particolarmente necessaria per le applicazioni World Wide Web CGI che passano argomenti attraverso le URL; l’uso di quest’opzione impedisce a un utente malintenzionato (o ad altri) di passare opzioni, assegnamenti o codice sorgente awk (con -e) all’applicazione CGI.11 Quest’opzione dovrebbe essere usata con script#!’ (vedi la sezione Programmi awk da eseguire come script), in questo modo:

#! /usr/local/bin/gawk -E

il programma awk è qui …
-g
--gen-pot

Analizza il programma sorgente e genera un file GNU gettext portable object template sullo standard output per tutte le costanti di tipo stringa che sono state marcate come da tradurre. Vedi la sezione Internazionalizzazione con gawk, per informazioni su quest’opzione.

-h
--help

Stampa un messaggio sull’“uso” riassumendo le opzioni brevi ed estese accettate da gawk ed esce.

-i file-sorgente
--include file-sorgente

Legge una libreria di sorgenti awk da file-sorgente. Quest’opzione è del tutto equivalente a usare la direttiva @include all’interno del proprio programma. È molto simile all’opzione -f, ma ci sono due differenze importanti. Primo, quando viene usata l’opzione -i, il sorgente del programma non viene caricato se è stato caricato in precedenza, mentre con -f, gawk carica sempre il file. Secondo, poiché quest’opzione è pensata per essere usata con librerie di codice, gawk non riconosce tali file come costituenti l’input del programma principale. Così, dopo l’elaborazione di un argomento -i, gawk si aspetta di trovare il codice sorgente principale attraverso l’opzione -f o sulla riga di comando.

I file specificati dall’opzione -i sono considerati appartenere allo spazio-dei-nomi ‘"awk" (@namespace "awk")’ a inizio programma. Vedi la sezione Come cambiare lo spazio-dei-nomi, per ulteriori informazioni.

-l ext
--load ext

Carica un’estensione dinamica denominata ext. Le estensioni sono memorizzate come librerie condivise di sistema. Quest’opzione ricerca la libreria usando la variabile d’ambiente AWKLIBPATH. Il suffisso corretto per la piattaforma in uso verrà fornito per default, perciò non è necessario specificarlo nel nome dell’estensione. La routine di inizializzazione dell’estensione dovrebbe essere denominata dl_load(). Un’alternativa è quella di usare la direttiva @load all’interno del programma per caricare una libreria condivisa. Questa funzionalità avanzata è descritta in dettaglio in Scrivere estensioni per gawk.

-L[valore]
--lint[=valore]

Emette messaggi d’avvertimento relativi a costrutti dubbi o non portabili ad altre implementazioni di awk. Non sono consentiti spazi tra -L e valore, se viene indicato il valore. Alcuni avvertimenti vengono emessi quando gawk legge preliminarmente il programma. Altri vengono emessi quando il programma viene eseguito. L’argomento opzionale può essere uno dei seguenti:

fatal

Richiede che gli avvertimenti di lint siano considerati errori gravi. Potrebbe essere una misura drastica, però il suo uso incoraggerà certamente lo sviluppo di programmi awk più corretti.

invalid

Vengono emessi solo gli avvertimenti relativi a quello che è effettivamente non valido (funzionalità non ancora completamente implementata).

no-ext

Gli avvertimenti relativi alle estensioni gawk sono disabilitati.

Alcuni avvertimenti vengono stampati solo una volta, anche se i costrutti dubbi per i quali vengono emessi avvisi ricorrono diverse volte nel programma awk. Perciò, nell’eliminazione dei problemi rilevati da --lint, bisogna porre attenzione a cercare tutte le occorrenze di ogni costrutto inappropriato. Siccome i programmi awk generalmente sono brevi, questa non è un’operazione gravosa.

-M
--bignum

Chiede il calcolo con precisione arbitraria sui numeri. Quest’opzione non ha alcun effetto se gawk non è compilato per l’uso delle librerie GNU MPFR e MP (vedi la sezione Calcolo con precisione arbitraria con gawk).

-n
--non-decimal-data

Abilita l’interpretazione automatica di valori ottali ed esadecimali nei dati di input (vedi la sezione Consentire dati di input non decimali).

ATTENZIONE: Quest’opzione può generare gravi malfunzionamenti nei vecchi programmi. Usare con cautela. Si noti anche che quest’opzione potrebbe non essere più disponibile in una futura versione di gawk.

-N
--use-lc-numeric

Forza l’uso del carattere di separazione decimale della localizzazione quando analizza i dati in input (vedi la sezione Il luogo fa la differenza).

-o[file]
--pretty-print[=file]

Consente la stampa di una versione formattata elegantemente dei programmi awk. Implica l’opzione --no-optimize. Per default il programma di output viene creato in un file chiamato awkprof.out (vedi la sezione Profilare i propri programmi awk). L’argomento opzionale file consente di specificare un nome-file differente per l’output. Non sono consentiti spazi tra -o e file, se file viene indicato.

NOTA: Nel passato, quest’opzione eseguiva anche il programma. Ora non è più così.

-O
--optimize

Abilita le ottimizzazioni di default nella rappresentazione interna del programma. Attualmente, questo comprende solo delle semplificazioni nell’uso di costanti.

Quest’ottimizzazione è abilitata per default. Quest’opzione rimane disponibile per compatibilità all’indietro. Tuttavia può essere usata per annullare l’effetto di una precedente opzione -s (si veda più sotto in questa lista).

-p[file]
--profile[=file]

Abilita la creazione del profilo di esecuzione di programmi awk (vedi la sezione Profilare i propri programmi awk). Implicitamente viene forzata l’opzione --no-optimize. Per default, i profili vengono creati in un file chiamato awkprof.out. L’argomento opzionale file consente di specificare un altro nome-file per il file del profilo. Non sono consentiti spazi tra -p e file, se viene indicato un file.

Il profilo contiene il numero di esecuzioni di ogni istruzione sul margine sinistro e il conteggio delle chiamate di funzione per ogni funzione.

-P
--posix

Opera in modalità POSIX rigorosa. Disabilita tutte le estensioni di gawk (proprio come --traditional) e disabilita tutte le estensioni non consentite da POSIX.

Vedi la sezione Sommario Estensioni Comuni, per un sommario delle estensioni di gawk che sono disabilitate da quest’opzione. Inoltre, vengono applicate le seguenti restrizioni:

Se si forniscono entrambe le opzioni --traditional e --posix sulla riga di comando, --posix ha la precedenza. Se vengono fornite entrambe le opzioni gawk emette un avviso.

-r
--re-interval

Consente le espressioni di intervallo (vedi la sezione Operatori di espressioni regolari) nelle espressioni regolari. Questo è ora il comportamento di default di gawk. Tuttavia, quest’opzione rimane (sia per retrocompatibilità che per l’uso in combinazione con --traditional).

-s
--no-optimize

Disabilita le opzioni di ottimizzazione di default di gawk effettuate sulla rappresentazione interna del programma.

-S
--sandbox

Disabilita la funzione system(), la ridirezione dell’input con getline, la ridirezione dell’output con print e printf, e le estensioni dinamiche. Inoltre, non consente di aggiungere nomi di file ad ARGV che non siano già presenti all’inizio dell’esecuzione di gawk. È particolarmente utile quando si vogliono eseguire script awk da sorgenti dubbie e si vuol essere ricuri che gli script non abbiano accesso al sistema (oltre ai file-dati di input specificati).

-t
--lint-old

Avvisa su costrutti che non sono disponibili nella versione originale di awk dalla versione 7 di Unix (vedi la sezione Differenze importanti tra V7 e System V Release 3.1).

-V
--version

Stampa informazioni sulla versione di questa specifica copia di gawk. Consente di determinare se la copia di gawk in uso è aggiornata rispetto a quello che è attualmente in distribuzione da parte della Free Software Foundation. È utile anche per la segnalazione di bug (vedi la sezione Segnalazione di problemi e bug).

--

Marca la fine di tutte le opzioni. Ogni argomento sulla riga di comando che segue -- viene messo nel vettore ARGV, anche se inizia con il segno meno (-).

Ogni altra opzione, se è stato specificato il testo di un programma è contrassegnata come non valida con un messaggio di avvertimento, altrimenti è ignorata.

In modalità di compatibilità, come caso particolare, se il valore di fs fornito all’opzione -F è ‘t’, FS è impostata al carattere TAB ("\t"). Questo è vero solo per --traditional e non per --posix (vedi la sezione Specificare come vengono separati i campi).

L’opzione -f può essere usata più di una volta nella riga di comando. In questo caso, awk legge il sorgente del suo programma da tutti i file indicati, come se fossere concatenati assieme a formare un unico grande file. Questo è utile per creare librerie di funzioni di awk. Queste funzioni possono venir scritte una volta e in seguito recuperate da una posizione standard, invece di doverle includere in ogni singolo programma. L’opzione -i è simile in questo senso. (Come indicato in Come scrivere definizioni e cosa significano, i nomi di funzione devono essere univoci).

Con awk standard, le funzioni di libreria si possono ancora usare, anche se il programma è immesso dalla tastiera, specificando ‘-f /dev/tty’. Dopo aver scritto il programma, premere Ctrl-d (il carattere di fine file) per terminarlo. (Si potrebbe anche usare ‘-f -’ per leggere il sorgente del programma dallo standard input, ma poi non si potrà usare lo standard input come sorgente di dati).

Siccome è scomodo usare il meccanismo di awk standard per combinare file sorgenti e programmi awk da riga di comando, gawk fornisce l’opzione -e. Questo non richiede di evitare l’uso dello standard input per immettere codice sorgente, e consente di combinare facilmente codice sorgente da riga di comando e da libreria (vedi la sezione Ricerca di programmi awk in una lista di directory.). Come per -f, le opzioni -e e -i si possono usare più volte nella riga di comando.

Se non sono specificate le opzioni -f o -e, gawk usa il primo argomento diverso da un’opzione, presente sulla riga di comando, come testo del codice sorgente del programma. Gli argomenti sulla riga di comando che si trovano dopo il testo del programma sono inseriti nel vettore ARGV; awk non continua ad analizzare la riga di comando alla ricerca di ulteriori opzioni.

Se la variabile d’ambiente POSIXLY_CORRECT esiste, gawk si comporta in modalità POSIX rigorosa, esattamente come se fosse stata fornita l’opzione --posix. Molti programi GNU cercano questa variabile d’ambiente per eliminare estensioni che confliggono con POSIX, ma gawk si comporta in modo diverso: sopprime tutte le estensioni, anche quelle che non confliggono con POSIX, e funziona rigorosamente in modalità POSIX. Se viene fornita l’opzione --lint sulla riga di comando e gawk passa alla modalità POSIX a causa di POSIXLY_CORRECT, viene emesso un messaggio di avvertimento indicando che è attiva la modalità POSIX. Normalmente questa variabile si imposta nel file di avvio della shell a livello utente. Per una shell compatibile con Bourne (come Bash), queste righe andranno aggiunte nel file .profile della directory "home" dell’utente:

POSIXLY_CORRECT=true
export POSIXLY_CORRECT

Per una shell compatibile con C,12 questa riga andrà aggiunta nel file .login nella directory "home" dell’utente:

setenv POSIXLY_CORRECT true

Avere POSIXLY_CORRECT impostata non è raccomandato per l’uso quotidiano, ma è utile per provare la portabilità dei programmi su altri ambienti.


Note a piè di pagina

(11)

Per maggiori dettagli, si veda la Sezione 4.4 di RFC 3875. Si veda anche note esplicative spedite alla mailing list gawk bug.

(12)

Non raccomandato.


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