diff options
Diffstat (limited to 'doc/it')
-rw-r--r-- | doc/it/ChangeLog | 6 | ||||
-rw-r--r-- | doc/it/gawktexi.in | 6048 | ||||
-rw-r--r-- | doc/it/sidebar.awk | 2 | ||||
-rw-r--r-- | doc/it/texinfo.tex | 7 |
4 files changed, 3123 insertions, 2940 deletions
diff --git a/doc/it/ChangeLog b/doc/it/ChangeLog index 00740b41..4a704418 100644 --- a/doc/it/ChangeLog +++ b/doc/it/ChangeLog @@ -1,3 +1,9 @@ +2019-10-02 Antonio Giovanni Colombo <azc100@gmail.com> + + * gawktexi.in: Updated. + * sidebar.awk: Updated. + * texinfo.tex: Updated. + 2019-09-24 Antonio Giovanni Colombo <azc100@gmail.com> * texinfo.tex: Updated. diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in index c41c25d8..115ef1ee 100644 --- a/doc/it/gawktexi.in +++ b/doc/it/gawktexi.in @@ -56,7 +56,7 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH Luglio 2019 +@set UPDATE-MONTH Settembre 2019 @set VERSION 5.1 @set PATCHLEVEL 0 @@ -246,11 +246,11 @@ @ifnotinfo @macro cindexawkfunc{name} -@cindex @code{\name\()}, funzione +@cindex @code{\name\()} (funzione) @end macro @macro cindexgawkfunc{name} -@cindex @code{\name\()}, funzione (@command{gawk}) +@cindex @code{\name\()} (funzione @command{gawk}) @end macro @end ifnotinfo @@ -1273,7 +1273,7 @@ per aver arricchito le nostre vite in misura incalcolabile. Arnold Robbins e io siamo buoni amici. Ci siamo conosciuti @c 11 years ago nel 1990 per un insieme di -circostanze---e per il nostro linguaggio di programmazione preferito, AWK. +circostanze --- e per il nostro linguaggio di programmazione preferito, AWK. Tutto era iniziato un paio d'anni prima. Avevo appena iniziato un nuovo lavoro e avevo notato un computer Unix scollegato che giaceva in un angolo. @@ -1286,9 +1286,9 @@ In uno dei miei giri per biblioteche e librerie alla ricerca di libri sullo Unix, trovai il libro, dalla copertina grigia, su AWK, noto anche come @: Alfred V.@: Aho, Brian W.@: Kernighan e Peter J.@: Weinberger, @cite{The AWK Programming Language}, (Addison-Wesley, -1988). Il semplice paradigma di programmazione di AWK ----trovare un'espressione di ricerca nell'input e di conseguenza compiere -un'azione---riduceva spesso +1988). Il semplice paradigma di programmazione di AWK --- trovare +un'espressione di ricerca nell'input e di conseguenza compiere +un'azione --- riduceva spesso complesse e tediose manipolazioni di dati a poche righe di codice. Ero entusiasta di cimentarmi nella programmazione in AWK. @@ -1495,6 +1495,7 @@ Ottobre 2014 </prefaceinfo> @end docbook +@cindex @command{awk} Lavorando con file di testo capita di dover eseguire alcuni tipi ripetitivi di operazioni. Si potrebbe voler estrarre alcune righe e scartare il resto, o fare modifiche laddove siano verificate certe condizioni, lasciando inalterato il @@ -1503,7 +1504,7 @@ resto del file. Questi compiti risultano spesso pi@`u agevoli usando di programmazione specializzato che rende facile eseguire semplici attivit@`a di riformattazione di dati. -@cindex Brian Kernighan, @command{awk} di +@cindex @command{gawk} L'implementazione GNU di @command{awk} @`e chiamata @command{gawk}; se invocato con le opzioni o con le variabili d'ambiente appropriate, (@pxref{Opzioni}), @`e pienamente @@ -1518,13 +1519,13 @@ Ci@`o implica che tutti i programmi Perci@`o nella maggior parte dei casi non si distingue tra @command{gawk} e altre implementazioni di @command{awk}. -@cindex @command{awk}, POSIX e, si veda anche POSIX @command{awk} -@cindex @command{awk}, POSIX e -@cindex POSIX, @command{awk} e -@cindex @command{gawk}, @command{awk} e -@cindex @command{awk}, @command{gawk} e -@cindex @command{awk}, uso di -Usando @command{awk} potete: +@cindex @command{awk} @subentry POSIX e @seealso{POSIX @command{awk}} +@cindex @command{awk} @subentry POSIX e +@cindex POSIX @subentry @command{awk} e +@cindex @command{gawk} @subentry @command{awk} e +@cindex @command{awk} @subentry @command{gawk} e +@cindex @command{awk} @subentry uso di +Usando @command{awk} si possono: @itemize @value{BULLET} @item @@ -1544,9 +1545,9 @@ Sperimentare algoritmi che possono essere adattati in seguito ad altri linguaggi per computer @end itemize -@cindex @command{awk}, si veda anche @command{gawk} -@cindex @command{gawk}, si veda anche @command{awk} -@cindex @command{gawk}, uso di +@cindex @command{awk} @seealso{@command{gawk}} +@cindex @command{gawk} @seealso{@command{awk}} +@cindex @command{gawk} @subentry uso di Inoltre, @command{gawk} fornisce strumenti che rendono facile: @@ -1578,7 +1579,7 @@ deve comunque avere familiarit@`a con i concetti di ridirezione I/O e di @dfn{pipe}.} cos@`{@dotless{i}} come con le funzionalit@`a di base della shell, come la ridirezione, l'input/output (I/O) e le @dfn{pipe}. -@cindex GNU @command{awk}, si veda @command{gawk} +@cindex GNU @command{awk} @seeentry{@command{gawk}} Implementazioni del linguaggio @command{awk} sono disponibili per diversi sistemi operativi di computer. Questo @value{DOCUMENT}, oltre a descrivere il linguaggio @command{awk} in generale, descrive anche la specifica @@ -1614,8 +1615,8 @@ per quei sistemi @`e stato rimosso.} @node Storia @unnumberedsec La storia di @command{gawk} e @command{awk} @cindex ricetta per un linguaggio di programmazione -@cindex linguaggio di programmazione, ricetta per un -@cindex programmazione, ricetta per un linguaggio di +@cindex linguaggi di programmazione @subentry ricetta per +@cindex programmazione @subentry ricetta per linguaggi di @sidebar Ricetta per un linguaggio di programmazione @multitable {2 parti di} {1 parte di @code{egrep}} {1 parte di @code{snobol}} @@ -1633,7 +1634,7 @@ parti di C. Documentare molto bene e distribuire. @cindex Aho, Alfred @cindex Weinberger, Peter @cindex Kernighan, Brian -@cindex @command{awk}, storia di +@cindex @command{awk} @subentry storia di Il nome @command{awk} deriva dalle iniziali dei suoi progettisti: Alfred V.@: Aho, Peter J.@: Weinberger e Brian W.@: Kernighan. La versione originale di @command{awk} fu scritta nel 1977 negli AT&T Bell Laboratories. @@ -1682,7 +1683,7 @@ per un elenco completo di quelli che hanno fornito contributi importanti a @node Nomi @unnumberedsec Una rosa, con ogni altro nome... -@cindex @command{awk}, nuovo e vecchio +@cindex @command{awk} @subentry nuovo e vecchio Il linguaggio @command{awk} si @`e evoluto nel corso degli anni. Tutti i dettagli si trovano in @ref{Storia del linguaggio}. Il linguaggio descritto in questo @value{DOCUMENT} @@ -1720,7 +1721,7 @@ dell'implementazione GNU, viene usato i termine @command{gawk}. @node Questo manuale @unnumberedsec Uso di questo @value{DOCUMENT} -@cindex @command{awk}, descrizione dei termini +@cindex @command{awk} @subentry descrizione dei termini Il termine @command{awk} si riferisce sia a uno specifico programma sia al linguaggio che si usa per dire al programma stesso cosa deve fare. Quando dobbiamo @@ -1732,8 +1733,8 @@ eseguire l'utilit@`a @command{awk}. Il termine ``programma @command{awk}'' si riferisce a un programma scritto dall'utente nel linguaggio di programmazione @command{awk}. -@cindex @command{gawk}, @command{awk} e -@cindex @command{awk}, @command{gawk} e +@cindex @command{gawk} @subentry @command{awk} e +@cindex @command{awk} @subentry @command{gawk} e @cindex POSIX @command{awk} In primo luogo, questo @value{DOCUMENT} spiega le funzionalit@`a di @command{awk} come definite nello standard POSIX, e lo fa nel contesto dell'implementazione @@ -1766,7 +1767,7 @@ sparsi in tutto il @value{DOCUMENT}. Aggiungono una spiegazione pi@`u completa su punti importanti, ma che probabilmente non sono di interesse in sede di prima lettura. @ifclear FOR_PRINT -Si trovano tutti nell'indice analitico, alla voce ``sidebar.'' @c non c'e riquadro nell'indice analitico +Si trovano tutti nell'indice analitico, alla voce ``riquadro.'' @end ifclear La maggior parte delle volte, gli esempi usano programmi @command{awk} completi. @@ -2105,12 +2106,12 @@ Note di avviso o raccomandazioni di cautela sono stampate in questo modo. @unnumberedsubsec Angoli Bui @cindex Kernighan, Brian @quotation -@i{Gli angoli bui sono essenzialmente frattali---per quanto vengano +@i{Gli angoli bui sono essenzialmente frattali --- per quanto vengano illuminati, ce n'@`e sempre uno pi@`u piccolo e pi@`u buio.} @author Brian Kernighan @end quotation -@cindex a.b., si veda angolo buio +@cindex a.b. @seeentry{angolo buio} @cindex angolo buio Fino allo standard POSIX (e @cite{@value{TITLE}}), molte caratteristiche di @command{awk} erano poco documentate o @@ -2130,7 +2131,7 @@ Appaiono anche nell'indice sotto la voce ``angolo buio.'' Ma come osservato nella citazione d'apertura, ogni trattazione degli angoli bui @`e per definizione incompleta. -@cindex e.c., si veda estensioni comuni +@cindex e.c. @seeentry{estensioni comuni} Estensioni al linguaggio standard di @command{awk} disponibili in pi@`u di una implementazione di @command{awk} sono segnate @ifclear FOR_PRINT @@ -2152,11 +2153,11 @@ dedita alla produzione e distribuzione di software liberamente distribuibile. @`E stata fondata da Richard M.@: Stallman, l'autore della prima versione dell'editor Emacs. GNU Emacs @`e oggi la versione di Emacs pi@`u largamente usata. -@cindex Progetto GNU -@cindex GNU, Progetto +@cindex progetto @subentry GNU +@cindex GNU @subentry progetto @cindex GPL (General Public License) -@cindex General Public License, si veda GPL -@cindex documentazione, online +@cindex General Public License @seeentry{GPL} +@cindex documentazione @subentry online Il Progetto GNU@footnote{GNU sta per ``GNU's Not Unix.''} @`e un progetto della Free Software Foundation in continuo sviluppo per creare un ambiente per computer completo, liberamente @@ -2185,9 +2186,8 @@ piccoli programmi di utilit@`a (come @command{gawk}), sono stati completati e sono liberamente disponibili. Il kernel del sistema operativo GNU (noto come HURD), @`e stato rilasciato ma @`e ancora allo stato di sviluppo iniziale. -@cindex Linux @cindex GNU/Linux -@cindex sistemi operativi basati su BSD +@cindex sistemi operativi @subentry basati su BSD In attesa che il sistema operativo GNU venga pi@`u completatamente sviluppato, si dovrebbe prendere in considerazione l'uso di GNU/Linux, un sistema operativo liberamente distribuibile e basato su Unix disponibile @@ -2200,8 +2200,8 @@ scaricabili da internet. @end ifclear @ifnotinfo -Il @value{DOCUMENT} @`e realmente libero---almeno, l'informazione che contiene -@`e libera per chiunque---. Il codice sorgente del @value{DOCUMENT}, leggibile +Il @value{DOCUMENT} @`e realmente libero --- almeno, l'informazione che contiene +@`e libera per chiunque ---. Il codice sorgente del @value{DOCUMENT}, leggibile elettronicamente, viene fornito con @command{gawk}. @ifclear FOR_PRINT (Dare un'occhiata alla Free Documentation @@ -2365,10 +2365,10 @@ significare sia che @cite{Come curiosare educatamente}]. Karl Berry ha aiutato in modo significativo con la parte @TeX{} di Texinfo. -@cindex Hartholz, Marshall -@cindex Hartholz, Elaine -@cindex Schreiber, Bert -@cindex Schreiber, Rita +@cindex Hartholz @subentry Marshall +@cindex Hartholz @subentry Elaine +@cindex Schreiber @subentry Bert +@cindex Schreiber @subentry Rita Vorrei ringraziare Marshall ed Elaine Hartholz di Seattle e il Dr.@: Bert e Rita Schreiber di Detroit per i lunghi periodi di vacanza trascorsi in tutta tranquillit@`a in casa loro, che mi hanno permesso di fare importanti progressi @@ -2388,7 +2388,7 @@ lavorare con lui a questo progetto @`e stato un vero piacere. @cindex Drepper, Ulrich @cindex GNITS mailing list -@cindex mailing list, GNITS +@cindex mailing list @subentry GNITS Gli intrepidi membri della lista GNITS, con una particolare menzione per Ulrich Drepper, hanno fornito un aiuto prezioso e commenti per il progetto delle funzionalit@`a di internazionalizzazione. @@ -2411,7 +2411,7 @@ versione 3.1 di @command{gawk}. @cindex Jaegermann, Michal @cindex Kahrs, J@"urgen @cindex Kasal, Stepan -@cindex Malmberg, John E. +@cindex Malmberg, John @cindex Pitts, Dave @cindex Ramey, Chet @cindex Rankin, Pat @@ -2483,9 +2483,9 @@ amicizia e per essere stato per me un modello da seguire ormai da quasi 30 anni! Averlo come revisiore @`e per me un privilegio eccitante, ma @`e stata anche un'esperienza che mi ha fatto sentire molto piccolo@enddots{} -@cindex Robbins, Miriam -@cindex Robbins, Jean -@cindex Robbins, Harry +@cindex Robbins @subentry Miriam +@cindex Robbins @subentry Jean +@cindex Robbins @subentry Harry @cindex D-o Devo ringraziare la mia meravigliosa moglie, Miriam, per la sua pazienza nel corso delle molte versioni di questo progetto, per la correzione delle bozze e @@ -2548,11 +2548,11 @@ seguenti capitoli: @end ifdocbook @node Per iniziare @chapter Per iniziare con @command{awk} -@c @cindex @dfn{script}, definizione di -@c @cindex rule, definizione di -@c @cindex program, definizione di +@c @cindex script, definition of +@c @cindex rule, definition of +@c @cindex program, definition of @c @cindex basic function of @command{awk} -@cindex @command{awk}, funzione di +@cindex @command{awk} @subentry utilizzo di Il compito fondamentale di @command{awk} @`e quello di ricercare righe (o altre unit@`a di testo) in file che corrispondano a certi criteri di ricerca. @@ -2561,9 +2561,9 @@ quella riga le azioni specificate per quel criterio. @command{awk} continua a elaborare righe in input in questo modo, finch@'e non raggiunge la fine delle righe nei file in input. -@cindex @command{awk}, uso di -@cindex linguaggi di programmazione@comma{} guidati-dai-dati/procedurali -@cindex @command{awk}, programmi +@cindex @command{awk} @subentry uso di +@cindex linguaggi di programmazione @subentry guidati-dai-dati vs. procedurali +@cindex programmi @command{awk} I programmi scritti in @command{awk} sono differenti dai programmi scritti nella maggior parte degli altri linguaggi, poich@'e i programmi @command{awk} sono @dfn{guidati dai dati} (ovvero, @@ -2577,8 +2577,8 @@ deve elaborare. Per questa ragione i programmi @command{awk} sono spesso piacevolmente facili da leggere e da scrivere. -@cindex programma, definizione di -@cindex regola, definizione di +@cindex programma @subentry definizione di +@cindex regola @subentry definizione di Quando si esegue @command{awk}, va specificato un @dfn{programma} @command{awk} che dice ad @command{awk} cosa fare. Il programma consiste di una serie di @@ -2623,7 +2623,7 @@ Per separare regole, basta andare a capo. Quindi un programma @node Eseguire gawk @section Come iniziare a eseguire programmi @command{gawk} -@cindex programmi @command{awk}, eseguire +@cindex programmi @command{awk} @subentry eseguire Ci sono vari modi di eseguire un programma @command{awk}. Se il programma @`e corto, @`e pi@`u facile includerlo nel comando con cui si invoca @command{awk}, cos@`{@dotless{i}}: @@ -2632,7 +2632,7 @@ cos@`{@dotless{i}}: awk '@var{programma}' @var{input-file1} @var{input-file2} @dots{} @end example -@cindex riga di comando, formati +@cindex riga di comando @subentry formati Quando il programma @`e lungo, di solito @`e meglio metterlo in un file ed eseguirlo con un comando come questo: @@ -2692,8 +2692,8 @@ della shell. Gli apici fanno inoltre s@`{@dotless{i}} che la shell tratti tutto @var{programma} come un solo argomento per @command{awk}, e permettono che @var{programma} sia pi@`u lungo di una riga. -@cindex shell, @dfn{script} -@cindex programmi @command{awk}, eseguire, da @dfn{script} di shell +@cindex shell @subentry @dfn{script} +@cindex programmi @command{awk} @subentry eseguire @subentry da @dfn{script} di shell Questo formato @`e utile anche per eseguire programmi @command{awk} di dimensioni piccole o medie da @dfn{script} di shell, perch@'e non richiede un file separato che contenga il programma @command{awk}. Uno @dfn{script} @@ -2718,8 +2718,8 @@ brevi, scritti sulla riga di comando. @subsection Senza uso di file in input (input immesso da tastiera) @cindex standard input -@cindex input, standard -@cindex file in input, eseguire @command{awk} senza usarli +@cindex input @subentry standard +@cindex input @subentry eseguire @command{awk} senza usare Si pu@`o anche eseguire @command{awk} senza indicare alcun file in input. Se si immette la seguente riga di comando: @@ -2733,9 +2733,8 @@ che di solito significa qualsiasi cosa venga immesso dalla tastiera. Ci@`o prosegue finch@'e non si segnala una fine-file battendo @kbd{Ctrl-d}. (In sistemi operativi non-POSIX, il carattere di fine-file pu@`o essere diverso.) -@cindex input, file in, si veda file in input -@cindex file in input, eseguire @command{awk} senza usarli -@cindex programmi @command{awk}, eseguire, senza file in input +@cindex input @subentry eseguire @command{awk} senza usare +@cindex programmi @command{awk} @subentry eseguire @subentry senza file in input Per esempio, il seguente programma stampa un consiglio da amico (dalla @cite{Guida galattica per gli autostoppisti} di Douglas Adams ), per non lasciarsi spaventare dalle complessit@`a della programmazione per @@ -2783,9 +2782,10 @@ $ @kbd{awk '@{ print @}'} @node Lunghi @subsection Eseguire programmi lunghi -@cindex programmi @command{awk}, eseguire -@cindex programmi @command{awk}, lunghi -@cindex file, programmi @command{awk} in +@cindex programmi @command{awk} @subentry eseguire +@cindex programmi @command{awk} @subentry lunghi +@cindex programmi @command{awk} @subentry in file +@cindex file @subentry programmi @command{awk} in Talora i programmi @command{awk} sono molto lunghi. In tali situazioni conviene mettere il programma in un file separato. Per dire ad @command{awk} di usare quel file come programma, digitare: @@ -2794,8 +2794,9 @@ conviene mettere il programma in un file separato. Per dire ad awk -f @var{file-sorgente} @var{input-file1} @var{input-file2} @dots{} @end example -@cindex @option{-f}, opzione -@cindex riga di comando, opzione @option{-f} +@cindex @option{-f} (opzione) +@cindex opzione @subentry @option{-f} +@cindex riga di comando @subentry opzione @option{-f} L'opzione @option{-f} dice al comando @command{awk} di ottenere il programma @command{awk} dal file @var{file-sorgente} (@pxref{Opzioni}). Ogni @value{FN} pu@`o essere usato come @var{file-sorgente}. Per esempio, si @@ -2819,7 +2820,7 @@ equivale al comando: awk 'BEGIN @{ print \"Non v\47allarmate!\" @}' @end example -@cindex protezione, nella riga di comando di @command{gawk} +@cindex protezione @subentry nella riga di comando di @command{gawk} @noindent Questo @`e gi@`a stato spiegato prima (@pxref{Leggere dal terminale}). @@ -2832,8 +2833,8 @@ di comando di @command{awk}. (Inoltre, se il programma si trova in un file, @`e possibile usare un apice singolo all'interno del programma, invece del magico @samp{\47}.) -@cindex apice singolo (@code{'}), nella riga di comando di @command{gawk} -@cindex @code{'} (apice singolo), nella riga di comando di @command{gawk} +@cindex apice singolo (@code{'}) @subentry nella riga di comando di @command{gawk} +@cindex @code{'} (apice singolo) @subentry nella riga di comando di @command{gawk} Per identificare chiaramente un file di programma @command{awk} come tale, si pu@`o aggiungere il suffisso @file{.awk} al @value{FN}. Ci@`o non cambia l'esecuzione del programma @command{awk} ma semplifica @@ -2842,9 +2843,9 @@ la ``manutenzione''. @node @dfn{Script} eseguibili @subsection Programmi @command{awk} da eseguire come @dfn{script} @cindex programmi @command{awk} -@cindex @code{#} (cancelletto), @code{#!} (@dfn{script} eseguibili) -@cindex Unix, @dfn{script} @command{awk} e -@cindex cancelletto (@code{#}), @code{#!} (@dfn{script} eseguibili) +@cindex @code{#} (cancelletto) @subentry @code{#!} (@dfn{script} eseguibili) +@cindex Unix @subentry @dfn{script} @command{awk} e +@cindex cancelletto (@code{#}) @subentry @code{#!} (@dfn{script} eseguibili) Una volta familiarizzato con @command{awk}, si potrebbero scrivere @dfn{script} che richiamano @command{awk}, usando il meccanismo di @@ -2883,7 +2884,7 @@ programma che gli utenti possono richiamare senza dover essere informati che il programma @`e scritto in @command{awk}. @sidebar Comprendere @samp{#!} -@cindex portabilit@`a, @code{#!} (@dfn{script} eseguibili) +@cindex portabilit@`a @subentry @code{#!} (@dfn{script} eseguibili) @command{awk} @`e un linguaggio @dfn{interpretato}. Ci@`o significa che il comando @command{awk} legge il programma dell'utente e poi elabora i dati @@ -2911,14 +2912,15 @@ Non si dovrebbero mettere altri argomenti oltre al primo nella riga @samp{#!} dopo il percorso del comando @command{awk}. Non funziona. Il sistema operativo tratta il resto della riga come un argomento solo, e lo passa ad @command{awk}. -Cos@`{@dotless{i}} facendo il comportamento sar@`a poco chiaro; con ogni probabilit@`a un +Cos@`{@dotless{i}} facendo il comportamento sar@`a poco chiaro; con ogni +probabilit@`a verr@`a emesso un messaggio di errore di qualche tipo da @command{awk}. -@cindex variabili @code{ARGC}/@code{ARGV}, portabilit@`a e -@cindex portabilit@`a, variabile @code{ARGV} +@cindex variabile @subentry @code{ARGC}/@code{ARGV} @subentry portabilit@`a e +@cindex portabilit@`a @subentry variabile @code{ARGV} +@cindex angolo buio @subentry @code{ARGV}, valore della variabile +@cindex angolo buio @subentry variabile @subentry @code{ARGV}, valore Infine, il valore di @code{ARGV[0]} -@cindex angolo buio, @code{ARGV}, valore della variabile -@cindex angolo buio, variabile @code{ARGV}, valore (@pxref{Variabili predefinite}) pu@`o variare a seconda del sistema operativo. Alcuni sistemi ci mettono @samp{awk}, altri il nome completo del percorso @@ -2930,10 +2932,10 @@ per ottenere il nome del proprio @dfn{script}. @node Commenti @subsection Documentare programmi @command{gawk}. -@cindex @code{#} (cancelletto), commentare -@cindex cancelletto (@code{#}), commentare -@cindex commentare -@cindex programmi @command{awk}, documentazione +@cindex @code{#} (cancelletto) @subentry commentare +@cindex cancelletto (@code{#}) @subentry commentare +@cindex commenti +@cindex programmi @command{awk} @subentry documentazione dei Un @dfn{commento} @`e del testo incluso in un programma per aiutare le persone che lo leggeranno; non @`e parte del programma eseguibile vero e @@ -2959,9 +2961,9 @@ digitare direttamente da tastiera, ma ci@`o solitmanete non serve molto; il fine di un commento @`e di aiutare l'utente o qualcun altro a comprendere il programma, quando lo rilegge in un secondo tempo. -@cindex protezione, per piccoli programmi awk -@cindex apice singolo (@code{'}), vs.@: apostrofo -@cindex @code{'} (apice singolo), vs.@: apostrofo +@cindex protezione @subentry per piccoli programmi awk +@cindex apice singolo (@code{'}) @subentry vs.@: apostrofo +@cindex @code{'} (apice singolo) @subentry vs.@: apostrofo @quotation ATTENZIONE Come detto in @ref{Monouso}, @@ -3005,7 +3007,7 @@ La prossima @value{SUBSECTION} descrive le regole di protezione della shell. @node Protezione @subsection Uso di apici nella shell. -@cindex shell, uso di apici, regole per +@cindex shell @subentry protezione @subentry regole per @menu * Doppi apici in DOS:: Passaggio di apici in file .BAT Windows. @@ -3023,8 +3025,8 @@ di shell di maggiori dimensioni: awk '@var{testo del programma}' @var{input-file1} @var{input-file2} @dots{} @end example -@cindex shell, uso di apici, regole per -@cindex Bourne shell, uso di apici, regole per la +@cindex shell @subentry protezione @subentry regole per +@cindex Bourne shell @subentry protezione @subentry regole per la Quando si lavora con la shell, non guasta avere una conoscenza di base sulle regole per l'uso di apici nella shell. Le regole seguenti valgono solo per shell in stile Bourne (come Bash, la @@ -3063,10 +3065,10 @@ lo protegge. La shell toglie la barra inversa e passa il carattere protetto al comando. @item -@cindex @code{\} (barra inversa), nei comandi di shell -@cindex barra inversa (@code{\}), nei comandi di shell -@cindex apice singolo (@code{'}), nei comandi di shell -@cindex @code{'} (apice singolo), nei comandi di shell +@cindex @code{\} (barra inversa) @subentry nei comandi di shell +@cindex barra inversa (@code{\}) @subentry nei comandi di shell +@cindex apice singolo (@code{'}) @subentry nei comandi di shell +@cindex @code{'} (apice singolo) @subentry nei comandi di shell Gli apici singoli proteggono qualsiasi cosa sia inclusa tra un apice di apertura e uno di chiusura. La shell non interpreta il testo protetto, il quale viene passato cos@`{@dotless{i}} com'@`e @@ -3077,8 +3079,8 @@ apici singoli. Potete trovare in un esempio di cosa succede se si prova a farlo. @item -@cindex doppio apice (@code{"}), nei comandi shell -@cindex @code{"} (doppio apice), nei comandi shell +@cindex doppio apice (@code{"}) @subentry nei comandi shell +@cindex @code{"} (doppio apice) @subentry nei comandi shell I doppi apici proteggono la maggior parte di quel che @`e racchiuso tra i doppi apici di apertura e quelli di chiusura. La shell effettua almeno la sostituzione di variabili e di comandi @@ -3111,8 +3113,8 @@ $ @kbd{awk "BEGIN @{ print \"Non v'allarmate!\" @}"} @print{} Non v'allarmate! @end example -@cindex apice singolo (@code{'}), con doppio apice -@cindex @code{'} (apice singolo), con doppio apice +@cindex apice singolo (@code{'}) @subentry con doppio apice +@cindex @code{'} (apice singolo) @subentry con doppio apice Va notato che l'apice singolo non @`e speciale all'interno di un testo racchiuso tra doppi apici. @@ -3128,7 +3130,7 @@ awk -F "" '@var{programma}' @var{file} # corretto @end example @noindent -@cindex stringa nulla come argomento a @command{gawk}, protezione della +@cindex stringa nulla @subentry come argomento a @command{gawk}, protezione della Non @`e invece da usare: @example @@ -3142,7 +3144,7 @@ Ci@`o come minimo genera un errore di sintassi, e un comportamento confuso nel caso peggiore. @end itemize -@cindex protezione, nella riga di comando di @command{gawk}, trucchi per la +@cindex protezione @subentry nella riga di comando di @command{gawk} @subentry trucchi per la Mischiare apici singoli e doppi @`e difficile. Occorre utilizzare trucchi della shell per gli apici, come questi: @@ -3311,8 +3313,8 @@ seguite da un doppio apice non hanno bisogno di essere duplicate. @node File dati di esempio @section @value{DDF} per gli esempi -@cindex input file, esempi -@cindex file di @code{mail-list} +@cindex input @subentry esempi +@cindex file @subentry @file{mail-list} Molti degli esempi in questo @value{DOCUMENT} hanno come input due @value{DF} di esempio. Il primo, @file{mail-list}, contiene una lista di nomi di persone, insieme ai loro indirizzi email e a informazioni riguardanti le @@ -3351,7 +3353,7 @@ Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @c endfile @end example -@cindex file @code{inventory-shipped} +@cindex file @subentry @file{inventory-shipped} Il @value{DF} @file{inventory-shipped} contiene informazioni sulle consegne effettuate durante l'anno. Ogni record contiene il mese, il numero di contenitori verdi spediti, @@ -3431,15 +3433,15 @@ $ @kbd{awk '/li/ @{ print $0 @}' mail-list} @print{} Samuel 555-3430 samuel.lanceolis@@shu.edu A @end example -@cindex azioni, default -@cindex criteri di ricerca, default +@cindex azioni @subentry default +@cindex criteri di ricerca @subentry default In una regola @command{awk}, il criterio di selezione o l'azione possono essere omessi, ma non entrambi. Se il criterio @`e omesso, l'azione viene applicata a @emph{ogni} riga dell'input. Se l'azione viene omessa, per default si stampano tutte le righe che sono individuate dal criterio di selezione. -@cindex azioni, omesse +@cindex azioni @subentry omesse Quindi, si potrebbe omettere l'azione (l'istruzione @code{print} e le graffe) nell'esempio precedente e il risultato sarebbe lo stesso: @command{awk} stampa tutte le righe che corrispondono al criterio di @@ -3447,7 +3449,7 @@ ricerca @samp{li}. Per confronto, omettendo l'istruzione @code{print} ma lasciando le graffe si richiede un'azione nulla, che non fa nulla (cio@`e non stampa alcuna riga). -@cindex programmi @command{awk}, esempi molto corti +@cindex programmi @command{awk} @subentry esempi molto corti Molti programmi @command{awk} pratici sono lunghi solo una o due righe. Qui sotto troviamo una collezione di programmi utili e corti, per iniziare. Alcuni di questi programmi contengono elementi del linguaggio che non sono @@ -3471,7 +3473,7 @@ awk 'length($0) > 80' data @end example L'unica regola presente ha un'espressione di relazione come modello -e non ha azione---quindi applica l'azione di default, stampando il record. +e non ha azione --- quindi applica l'azione di default, stampando il record. @item Stampare la lunghezza della riga in input pi@`u lunga: @@ -3479,15 +3481,15 @@ Stampare la lunghezza della riga in input pi@`u lunga: @example @group awk '@{ if (length($0) > max) max = length($0) @} - END @{ print max @}' data +END @{ print max @}' data @end group @end example Il codice associato a @code{END} viene eseguito dopo che tutto l'input @`e stato letto; @`e l'altra faccia della medaglia di @code{BEGIN}. -@cindex programma @command{expand} -@cindex @command{expand}, programma +@cindex programma @subentry @command{expand} +@cindex @command{expand} (programma) @item Stampare la lunghezza della riga pi@`u lunga in @file{data}: @@ -3640,7 +3642,7 @@ ls -l | awk '$6 == "Nov" @{ somma += $5 @} END @{ print somma @}' @end example -@cindex comando @command{ls} +@cindex comando @subentry @command{ls} Questo comando stampa il numero totale di byte in tutti i file contenuti nella directory corrente, la cui data di modifica @`e novembre (di qualsiasi anno). La parte @w{@samp{ls -l}} dell'esempio @`e un comando di sistema che @@ -3659,7 +3661,7 @@ ogni file e la data di ultima modifica. Il suo output @`e del tipo: @end example @noindent -@cindex continuazione di riga, nella C shell +@cindex continuazione di riga @subentry nella C shell Il primo campo contiene le autorizzazioni di lettura/scrittura [r/w], il secondo il numero dei collegamenti al file [cio@`e il numero di nomi con cui il file @`e conosciuto], e il terzo campo identifica il proprietario del file. @@ -3670,7 +3672,7 @@ rispettivamente, in cui il file @`e stato modificato. Infine, il nono campo contiene il @value{FN}. @c @cindex automatic initialization -@cindex inizializzazione automatica +@cindex inizializzazione @subentry automatica L'espressione @samp{$6 == "Nov"} nel nostro programma @command{awk} controlla se il sesto campo dell'output di @w{@samp{ls -l}} corrisponda alla stringa @samp{Nov}. Ogni volta che una riga ha la stringa @@ -3697,17 +3699,17 @@ dei rapporti molto utili ed esteticamente gradevoli. @node Istruzioni/Righe @section Istruzioni e righe in @command{awk} @cindex interruzioni di riga -@cindex andare a capo +@cindex ritorno a capo Molto spesso, ogni riga di un programma @command{awk} @`e un'istruzione a s@'e stante o una regola isolata, come: @example awk '/12/ @{ print $0 @} - /21/ @{ print $0 @}' mail-list inventory-shipped +/21/ @{ print $0 @}' mail-list inventory-shipped @end example -@cindex @command{gawk}, andare a capo +@cindex @command{gawk} @subentry ritorno a capo Comunque, @command{gawk} ignora i ritorni a capo dopo ognuno di questi simboli e istruzioni: @@ -3724,8 +3726,8 @@ Il cambio di riga dopo @samp{?} e i @samp{:} @`e un'estensione minore in @command{gawk}; specificando @option{--posix} come opzione (@pxref{Opzioni}), quest'estensione non @`e valida.} -@cindex @code{\} (barra inversa), continuazione di riga e -@cindex barra inversa (@code{\}), continuazione di riga e +@cindex @code{\} (barra inversa) @subentry continuazione di riga e +@cindex barra inversa (@code{\}) @subentry continuazione di riga e Volendo dividere una sola istruzione su due righe in un punto in cui andando a capo sarebbe considerata conclusa, @`e possibile @dfn{continuare} nella riga successiva terminando la prima riga con un carattere di @@ -3736,11 +3738,11 @@ a una stringa o a un'espressione regolare. Per esempio: @example awk '/Questa espressione regolare @`e troppo lunga, quindi\ - la continuiamo sulla riga seguente/ @{ print $1 @}' +la continuiamo sulla riga seguente/ @{ print $1 @}' @end example @noindent -@cindex portabilit@`a, continuazione di riga con barra inversa e +@cindex portabilit@`a @subentry continuazione di riga con barra inversa e Non abbiamo quasi mai usato la continuazione tramite barra inversa nei nostri programmi di esempio. @command{gawk} non pone limiti alla lunghezza di una riga, quindi la continuazione tramite barra inversa non @`e mai strettamente @@ -3759,9 +3761,9 @@ mezzo di un'espressione regolare o di una stringa. @c 10/2000: gawk, mawk, and current bell labs awk allow it, @c solaris 2.7 nawk does not. Solaris /usr/xpg4/bin/awk does though! sigh. -@cindex comando @command{csh} -@cindex barra inversa (@code{\}), continuazione di riga e, in @command{csh} -@cindex @code{\} (barra inversa), continuazione di riga e, in @command{csh} +@cindex comando @subentry @command{csh} +@cindex barra inversa (@code{\}) @subentry continuazione di riga e @subentry in @command{csh} +@cindex @code{\} (barra inversa) @subentry continuazione di riga e @subentry in @command{csh} @quotation ATTENZIONE @emph{la continuazione tramite barra inversa non funziona come sopra descritto nella C shell.} Funziona per programmi @command{awk} contenuti in file e @@ -3802,9 +3804,9 @@ criterio di selezione e azione su righe separate, si @emph{deve} usare la continuazione tramite barra inversa; non si pu@`o fare diversamente. -@cindex barra inversa (@code{\}), continuazione di riga, commenti e -@cindex @code{\} (barra inversa), continuazione di riga, commenti e -@cindex commenti, continuazione di riga con barra inversa e i +@cindex barra inversa (@code{\}) @subentry continuazione di riga e @subentry commenti +@cindex @code{\} (barra inversa) @subentry continuazione di riga e @subentry commenti +@cindex commenti @subentry continuazione di riga con barra inversa e Un'altra cosa da tener presente @`e che la continuazione tramite barra inversa e i commenti non possono essere frammisti. Non appena @command{awk} incontra un @samp{#} che inizia un commento, ignora @emph{tutto} il resto della riga. @@ -3826,11 +3828,11 @@ successiva. Invece, la combinazione barra inversa-ritorno a capo non viene per nulla notata, in quanto ``nascosta'' all'interno del commento. Quindi, il @code{BEGIN} @`e marcato come errore di sintassi. -@cindex istruzioni multiple -@cindex @code{;} (punto e virgola), separare istruzioni nelle azioni -@cindex punto e virgola (@code{;}), separare istruzioni nelle azioni -@cindex @code{;} (punto e virgola), separare regole -@cindex punto e virgola (@code{;}), separare regole +@cindex istruzioni @subentry multiple +@cindex @code{;} (punto e virgola) @subentry separare istruzioni nelle azioni +@cindex punto e virgola (@code{;}) @subentry separare istruzioni nelle azioni +@cindex @code{;} (punto e virgola) @subentry separare regole +@cindex punto e virgola (@code{;}) @subentry separare regole Quando le istruzioni @command{awk} all'interno di una regola sono brevi, si potrebbe metterne pi@`u d'una su una riga sola. Ci@`o @`e possibile separando le istruzioni con un punto e virgola (@samp{;}). @@ -3883,7 +3885,7 @@ descritte sistematicamente in @ref{Variabili predefinite} e in @node Quando @section Quando usare @command{gawk} -@cindex @command{awk}, uso di +@cindex @command{awk} @subentry uso di Ora che abbiamo visto qualcosa di quel che @command{awk} @`e in grado di fare, ci si potr@`a chiedere come @command{awk} potrebbe tornare utile. Usando programmi di utilit@`a, criteri di ricerca sofisticati, separatori @@ -3902,7 +3904,7 @@ e buttati via. Poich@'e i programmi @command{awk} sono interpretati, si pu@`o evitare la (normalmente laboriosa) parte di compilazione nel ciclo tipico dello sviluppo software, ossia edita-compila-prova-correggi. -@cindex Brian Kernighan, @command{awk} di +@cindex Brian Kernighan @subentry @command{awk} di In @command{awk} sono stati scritti programmi complessi, compreso un assembler completo, pluri-piattaforma per @ifclear FOR_PRINT @@ -3921,7 +3923,7 @@ al linguaggio Prolog. Le possibilit@`a dell'originale @command{awk} erano messe a dura prova da programmi di questa complessit@`a, ma le versioni moderne sono pi@`u robuste. -@cindex programmi @command{awk}, complessi +@cindex programmi @command{awk} @subentry complessi Se capita di scrivere programmi @command{awk} pi@`u lunghi di, diciamo, qualche centinaio di righe, si potrebbe considerare la possibilit@`a di usare un linguaggio di programmazione differente da @command{awk}. @@ -4011,10 +4013,10 @@ tranquillamente saltare. @node Riga di comando @section Come eseguire @command{awk} -@cindex riga di comando, eseguire @command{awk} da -@cindex @command{awk}, eseguire -@cindex argomenti, riga di comando, eseguire @command{awk} -@cindex opzioni sulla riga di comando, eseguire @command{awk} +@cindex riga di comando @subentry eseguire @command{awk} da +@cindex @command{awk} @subentry eseguire +@cindex argomenti @subentry riga di comando @subentry eseguire @command{awk} +@cindex opzioni @subentry sulla riga di comando @subentry per eseguire @command{awk} Ci sono due modi di eseguire @command{awk}: con un programma esplicito o con uno o pi@`u file di programma. Qui @`e mostrata la sintassi di entrambi; le voci @@ -4025,22 +4027,24 @@ racchiuse tra [@dots{}] sono opzionali: @command{awk} [@var{opzioni}] [@option{--}] @code{'@var{programma}'} @var{file} @dots{} @end display -@cindex GNU, opzioni estese -@cindex estese, opzioni -@cindex opzioni estese +@cindex GNU @subentry opzioni estese sulla riga di comando +@cindex estese @subentry opzioni +@cindex opzioni @subentry estese GNU In aggiunta alle tradizionali opzioni di una sola lettera in stile POSIX, @command{gawk} consente anche le opzioni estese GNU. -@cindex angolo buio, invocare @command{awk} -@cindex @dfn{lint}, controlli con programma vuoto +@cindex angolo buio @subentry invocare @command{awk} +@cindex @dfn{lint} @subentry controlli @subentry con programma vuoto +@cindex controllo @subentry @dfn{lint} @subentry con programma vuoto @`E possibile invocare @command{awk} con un programma vuoto: @example awk '' file_dati_1 file_dati_2 @end example -@cindex @option{--lint}, opzione -@cindex angolo buio, programmi vuoti +@cindex @option{--lint} (opzione) +@cindex opzione @subentry @option{--lint} +@cindex angolo buio @subentry programmi vuoti @noindent Fare cos@`{@dotless{i}} ha comunque poco senso; @command{awk} termina silenziosamente quando viene fornito un programma vuoto. @@ -4051,10 +4055,10 @@ che il programma @`e vuoto. @node Opzioni @section Opzioni sulla riga di comando -@cindex opzioni sulla riga di comando -@cindex riga di comando, opzioni -@cindex GNU, opzioni estese -@cindex opzioni estese +@cindex opzioni @subentry sulla riga di comando +@cindex riga di comando @subentry opzioni +@cindex GNU @subentry opzioni estese sulla riga di comando +@cindex opzioni @subentry estese GNU 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 @@ -4067,7 +4071,7 @@ dell'argomento sono separati da spazi. Se un'opzione con un valore viene immessa pi@`u di una volta, l'ultimo valore @`e quello che conta. -@cindex POSIX @command{awk}, opzioni estese GNU e +@cindex POSIX @command{awk} @subentry opzioni estese GNU Ogni opzione estesa di @command{gawk} ha una corrispondente opzione breve in stile POSIX. Le opzioni estese e brevi sono @@ -4077,17 +4081,21 @@ L'elenco seguente descrive le opzioni richieste dallo standard POSIX: @table @code @item -F @var{fs} @itemx --field-separator @var{fs} -@cindex @option{-F}, opzione -@cindex @option{--field-separator}, opzione -@cindex @code{FS}, variabile, l'opzione @code{--field-separator} e +@cindex @option{-F} (opzione) +@cindex opzione @subentry @option{-F} +@cindex @option{--field-separator} (opzione) +@cindex opzione @subentry @option{--field-separator} +@cindex @code{FS} (variabile) @subentry l'opzione @code{--field-separator} e Imposta la variabile @code{FS} a @var{fs} (@pxref{Separatori di campo}). @item -f @var{file-sorgente} @itemx --file @var{file-sorgente} -@cindex @option{-f}, opzione -@cindex @option{--file}, opzione -@cindex @command{awk}, programmi, collocazione dei +@cindex @option{-f} (opzione) +@cindex opzione @subentry @option{-f} +@cindex @option{--file} (opzione) +@cindex opzione @subentry @option{--file} +@cindex programmi @command{awk} @subentry collocazione dei Legge il sorgente del programma @command{awk} da @var{file-sorgente} anzich@'e prenderlo dal primo argomento che non @`e un'opzione. Quest'opzione pu@`o essere data pi@`u volte; il programma @command{awk} @@ -4101,9 +4109,11 @@ informazioni. @item -v @var{var}=@var{val} @itemx --assign @var{var}=@var{val} -@cindex @option{-v}, opzione -@cindex @option{--assign}, opzione -@cindex variabili, impostazione +@cindex @option{-v} (opzione) +@cindex opzione @subentry @option{-v} +@cindex @option{--assign} (opzione) +@cindex opzione @subentry @option{--assign} +@cindex variabili @subentry impostazione Imposta la variabile @var{var} al valore @var{val} @emph{prima} che inizi l'esecuzione del programma. Tali valori di variabile sono disponibili all'interno della regola @code{BEGIN} @@ -4114,8 +4124,8 @@ essere usata pi@`u di una volta, impostando ogni volta una variabile differente, in questo modo: @samp{awk @w{-v pippo=1} @w{-v pluto=2} @dots{}}. -@cindex predefinite, variabili, opzione @code{-v}@comma{} impostare con -@cindex variabili predefinite, impostare con opzione @code{-v} +@cindex predefinita @subentry variabile @subentry impostare con opzione @code{-v} +@cindex variabili @subentry predefinite @subentry impostare con opzione @code{-v} @quotation ATTENZIONE Usare @option{-v} per impostare valori di variabili predefinite pu@`o condurre a risultati sorprendenti. @command{awk} reimposter@`a i @@ -4124,7 +4134,8 @@ eventuali valori iniziali che possono essere stati assegnati. @end quotation @item -W @var{gawk-opt} -@cindex @option{-W}, opzione +@cindex @option{-W} (opzione) +@cindex opzione @subentry @option{-W} Fornisce un'opzione specifica dell'implementazione. Questa @`e la convenzione POSIX per fornire opzioni specifiche dell'implementazione. Queste opzioni @@ -4135,15 +4146,15 @@ L'elenco completo delle opzioni specifiche di @command{gawk} @`e riportato di seguito. @item -- -@cindex riga di comando, opzioni, fine delle -@cindex opzioni sulla riga di comando, fine delle +@cindex riga di comando @subentry opzioni @subentry fine delle +@cindex opzioni @subentry sulla riga di comando @subentry fine delle Segnale della fine delle opzioni da riga di comando. I seguenti argomenti non sono trattati come opzioni anche se iniziano con @samp{-}. Questa interpretazione di @option{--} segue le convenzioni POSIX per l'analisi degli argomenti. -@cindex @code{-} (meno), nomi di file che iniziano con -@cindex meno (@code{-}), nomi di file che iniziano con +@cindex @code{-} (meno) @subentry nomi di file che iniziano con +@cindex meno (@code{-}) @subentry nomi di file che iniziano con @`E utile se si hanno @value{FNS} che iniziano con @samp{-}, o negli @dfn{script} di shell, se si hanno @value{FNS} che devono essere specificati dall'utente che potrebbero iniziare con @samp{-}. @@ -4157,8 +4168,10 @@ L'elenco che segue descrive le opzioni specifiche di @command{gawk}: @table @asis @item @option{-b} @itemx @option{--characters-as-bytes} -@cindex @option{-b}, opzione -@cindex @option{--characters-as-bytes}, opzione +@cindex @option{-b} (opzione) +@cindex opzione @subentry @option{-b} +@cindex @option{--characters-as-bytes} (opzione) +@cindex opzione @subentry @option{--characters-as-bytes} Fa s@`{@dotless{i}} che @command{gawk} tratti tutti i dati in input come caratteri di un solo byte. In aggiunta, tutto l'output scritto con @code{print} o @code{printf} viene trattato come composto da caratteri contenuti in un solo byte. @@ -4174,9 +4187,11 @@ multibyte validi. Quest'opzione @`e una maniera facile di dire a @command{gawk}: @item @option{-c} @itemx @option{--traditional} -@cindex @option{-c}, opzione -@cindex @option{--traditional}, opzione -@cindex modalit@`a compatibile di (@command{gawk}), specificare +@cindex @option{-c} (opzione) +@cindex opzione @subentry @option{-c} +@cindex @option{--traditional} (opzione) +@cindex opzione @subentry @option{--tradizional} +@cindex modalit@`a compatibile di (@command{gawk}) @subentry specificare Specifica la @dfn{modalit@`a di compatibilit@`a}, nella quale le estensioni GNU al linguaggio @command{awk} sono disabilitate; in questo modo @command{gawk} si comporta proprio come la versione di BWK @command{awk}. @@ -4190,27 +4205,31 @@ Si veda anche @item @option{-C} @itemx @option{--copyright} -@cindex @option{-C}, opzione -@cindex @option{--copyright}, opzione -@cindex GPL (General Public License), stampare +@cindex @option{-C} (opzione) +@cindex opzione @subentry @option{-C} +@cindex @option{--copyright} (opzione) +@cindex opzione @subentry @option{--copyright} +@cindex GPL (General Public License) @subentry stampare Stampa la versione ridotta della General Public License ed esce. @item @option{-d}[@var{file}] @itemx @option{--dump-variables}[@code{=}@var{file}] -@cindex @option{-d}, opzione -@cindex @option{--dump-variables}, opzione +@cindex @option{-d} (opzione) +@cindex opzione @subentry @option{-d} +@cindex @option{--dump-variables} (opzione) +@cindex opzione @subentry @option{--dump-variables} @cindex fornire una lista di tutte le variabili del programma -@cindex @file{awkvars.out}, file -@cindex file @file{awkvars.out} -@cindex variabili globali, stampare una lista delle +@cindex @file{awkvars.out} @subentry file +@cindex file @subentry @file{awkvars.out} +@cindex variabili @subentry globali @subentry stampare una lista delle Stampa una lista ordinata di variabili globali, i loro tipi, e i valori finali in @var{file}. Se non viene fornito alcun @var{file}, stampa questa lista in un file chiamato @file{awkvars.out} nella directory corrente. Non sono consentiti spazi tra @option{-d} e @var{file}, se @var{file} viene specificato. -@cindex risoluzione di problemi, refusi@comma{} variabili globali -@cindex problemi, risoluzione di, refusi@comma{} variabili globali +@cindex risoluzione di problemi @subentry refusi @subentry variabili globali +@cindex problemi @subentry risoluzione di @subentry refusi, variabili globali Avere una lista di tutte le variabili globali @`e un buon modo per cercare refusi nei propri programmi. Si pu@`o usare quest'opzione anche se si ha un grosso programma con tantissime @@ -4221,9 +4240,11 @@ semplici come @code{i}, @code{j}, etc.). @item @option{-D}[@var{file}] @itemx @option{--debug}[@code{=}@var{file}] -@cindex @option{-D}, opzione -@cindex @option{--debug}, opzione -@cindex @command{awk}, debug, abilitare +@cindex @option{-D} (opzione) +@cindex opzione @subentry @option{-D} +@cindex @option{--debug} (opzione) +@cindex opzione @subentry @option{--debug} +@cindex @command{awk} @subentry debug, abilitare Abilita l'esecuzione del debug di programmi @command{awk} (@pxref{Debugging}). Per default, il debugger legge i comandi interattivamente dalla tastiera @@ -4235,9 +4256,11 @@ Non sono consentiti spazi tra @option{-D} e @var{file}, se @item @option{-e} @var{testo-del-programma} @itemx @option{--source} @var{testo-del-programma} -@cindex @option{-e}, opzione -@cindex @option{--source}, opzione -@cindex codice sorgente, combinare +@cindex @option{-e} (opzione) +@cindex opzione @subentry @option{-e} +@cindex @option{--source} (opzione) +@cindex opzione @subentry @option{--source} +@cindex codice sorgente @subentry combinare Fornisce del codice sorgente nel @var{testo-del-programma}. Quest'opzione consente di combinare il codice sorgente contenuto in file col codice sorgente immesso sulla riga di comando. @@ -4272,9 +4295,11 @@ informazioni. @item @option{-E} @var{file} @itemx @option{--exec} @var{file} -@cindex @option{-E}, opzione -@cindex @option{--exec}, opzione -@cindex @command{awk}, programmi, collocazione dei +@cindex @option{-E} (opzione) +@cindex opzione @subentry @option{-E} +@cindex @option{--exec} (opzione) +@cindex opzione @subentry @option{--exec} +@cindex programmi @command{awk} @subentry collocazione dei @cindex CGI, @command{awk} @dfn{script} per Simile a @option{-f}, legge il testo del programma @command{awk} da @var{file}. Ci sono due differenze rispetto a @option{-f}: @@ -4311,10 +4336,12 @@ con @dfn{script} @samp{#!} @item @option{-g} @itemx @option{--gen-pot} -@cindex @option{-g}, opzione -@cindex @option{--gen-pot}, opzione -@cindex portabilit@`a, generare file oggetto -@cindex file oggetto portabili, generare +@cindex @option{-g} (opzione) +@cindex opzione @subentry @option{-g} +@cindex @option{--gen-pot} (opzione) +@cindex opzione @subentry @option{--gen-pot} +@cindex portabilit@`a @subentry generare file oggetto +@cindex file @subentry oggetto portabili @subentry generare Analizza il programma sorgente e genera un file GNU @command{gettext} @dfn{portable object template} sullo standard output per tutte le costanti di tipo stringa che sono state marcate @@ -4324,19 +4351,23 @@ per informazioni su quest'opzione. @item @option{-h} @itemx @option{--help} -@cindex @option{-h}, opzione -@cindex @option{--help}, opzione -@cindex GNU, opzioni estese, stampare una lista di -@cindex opzioni, stampare una lista di -@cindex stampa, lista di opzioni +@cindex @option{-h} (opzione) +@cindex opzione @subentry @option{-h} +@cindex @option{--help} (opzione) +@cindex opzione @subentry @option{--help} +@cindex GNU @subentry opzioni estese sulla riga di comando @subentry stampare una lista di +@cindex opzioni @subentry stampare una lista di +@cindex stampa @subentry lista di opzioni Stampa un messaggio sull'``uso'' riassumendo le opzioni brevi ed estese accettate da @command{gawk} ed esce. @item @option{-i} @var{file-sorgente} @itemx @option{--include} @var{file-sorgente} -@cindex @option{-i}, opzione -@cindex @option{--include}, opzione -@cindex @command{awk}, programmi, collocazione dei +@cindex @option{-i} (opzione) +@cindex opzione @subentry @option{-i} +@cindex @option{--include} (opzione) +@cindex opzione @subentry @option{--include} +@cindex programmi @command{awk} @subentry collocazione dei Legge una libreria di sorgenti @command{awk} da @var{file-sorgente}. Quest'opzione @`e del tutto equivalente a usare la direttiva @code{@@include} all'interno del proprio programma. @`E molto simile all'opzione @@ -4356,9 +4387,12 @@ informazioni. @item @option{-l} @var{ext} @itemx @option{--load} @var{ext} -@cindex @option{-l}, opzione -@cindex @option{--load}, opzione +@cindex @option{-l} (opzione) +@cindex opzione @subentry @option{-l} +@cindex @option{--load} (opzione) +@cindex opzione @subentry @option{--load} @cindex caricare estensioni +@cindex estensioni @subentry caricare Carica un'estensione dinamica denominata @var{ext}. Le estensioni sono memorizzate come librerie condivise di sistema. Quest'opzione ricerca la libreria usando la variabile d'ambiente @@ -4372,10 +4406,12 @@ condivisa. Questa funzionalit@`a avanzata @`e descritta in dettaglio in @item @option{-L}[@var{valore}] @itemx @option{--lint}[@code{=}@var{valore}] -@cindex @option{-l}, opzione -@cindex @option{--lint}, opzione -@cindex @dfn{lint}, controlli, emissione di avvertimenti -@cindex avvertimenti, emissione di +@cindex @option{-L} (opzione) +@cindex opzione @subentry @option{-L} +@cindex @option{--lint} (opzione) +@cindex opzione @subentry @option{--lint} +@cindex @dfn{lint} @subentry controlli @subentry emissione di avvertimenti +@cindex avvertimenti @subentry emissione di Emette messaggi d'avvertimento relativi a costrutti dubbi o non portabili ad altre implementazioni di @command{awk}. Non sono consentiti spazi tra @option{-L} e @var{valore}, se @@ -4400,8 +4436,10 @@ brevi, questa non @`e un'operazione gravosa. @item @option{-M} @itemx @option{--bignum} -@cindex @option{-M}, opzione -@cindex @option{--bignum}, opzione +@cindex @option{-M} (opzione) +@cindex opzione @subentry @option{-M} +@cindex @option{--bignum} (opzione) +@cindex opzione @subentry @option{--bignum} Chiede il calcolo con precisione arbitraria sui numeri. Quest'opzione non ha alcun effetto se @command{gawk} non @`e compilato per l'uso delle librerie GNU MPFR e MP @@ -4409,11 +4447,15 @@ MPFR e MP @item @option{-n} @itemx @option{--non-decimal-data} -@cindex @option{-n}, opzione -@cindex @option{--non-decimal-data}, opzione -@cindex esadecimali@comma{} valori, abilitare l'interpretazione di -@cindex ottali@comma{} valori, abilitare l'interpretazione di -@cindex risoluzione di problemi, opzione @code{--non-decimal-data} +@cindex @option{-n} (opzione) +@cindex opzione @subentry @option{-n} +@cindex @option{--non-decimal-data} (opzione) +@cindex opzione @subentry @option{--non-decimal-data} +@cindex esadecimali @subentry numeri @subentry abilitare l'interpretazione di +@cindex valori @subentry esadecimali @subentry abilitare l'interpretazione di +@cindex ottali @subentry numeri @subentry abilitare l'interpretazione di +@cindex valori @subentry ottali @subentry abilitare l'interpretazione di +@cindex risoluzione di problemi @subentry opzione @code{--non-decimal-data} Abilita l'interpretazione automatica di valori ottali ed esadecimali nei dati di input (@pxref{Dati non decimali}). @@ -4427,8 +4469,10 @@ quest'opzione potrebbe non essere pi@`u disponibile in una futura versione di @item @option{-N} @itemx @option{--use-lc-numeric} -@cindex @option{-N}, opzione -@cindex @option{--use-lc-numeric}, opzione +@cindex @option{-N} (opzione) +@cindex opzione @subentry @option{-N} +@cindex @option{--use-lc-numeric} (opzione) +@cindex opzione @subentry @option{--use-lc-numeric} Forza l'uso del carattere di separazione decimale della localizzazione quando analizza i dati in input (@pxref{Localizzazioni}). @@ -4436,8 +4480,10 @@ quando analizza i dati in input @cindex stampa elegante @item @option{-o}[@var{file}] @itemx @option{--pretty-print}[@code{=}@var{file}] -@cindex @option{-o}, opzione -@cindex @option{--pretty-print}, opzione +@cindex @option{-o} (opzione) +@cindex opzione @subentry @option{-o} +@cindex @option{--pretty-print} (opzione) +@cindex opzione @subentry @option{--pretty-print} Consente la stampa di una versione formattata elegantemente dei programmi @command{awk}. Implica l'opzione @option{--no-optimize}. Per default il programma di output viene creato in un file @@ -4454,8 +4500,10 @@ Ora non @`e pi@`u cos@`{@dotless{i}}. @item @option{-O} @itemx @option{--optimize} -@cindex @option{--optimize}, opzione -@cindex @option{-O}, opzione +@cindex @option{-O} (opzione) +@cindex opzione @subentry @option{-O} +@cindex @option{--optimize} (opzione) +@cindex opzione @subentry @option{--optimize} Abilita le ottimizzazioni di default nella rappresentazione interna del programma. Attualmente, questo comprende solo delle semplificazioni nell'uso di costanti. @@ -4467,9 +4515,11 @@ opzione @option{-s} (si veda pi@`u sotto in questa lista). @item @option{-p}[@var{file}] @itemx @option{--profile}[@code{=}@var{file}] -@cindex @option{-p}, opzione -@cindex @option{--profile}, opzione -@cindex @command{awk}, profilazione, abilitare la +@cindex @option{-p} (opzione) +@cindex opzione @subentry @option{-p} +@cindex @option{--profile} (opzione) +@cindex opzione @subentry @option{--profile} +@cindex @command{awk} @subentry profilazione, abilitare la Abilita la creazione del profilo di esecuzione di programmi @command{awk} (@pxref{Profilare}). Implicitamente viene forzata l'opzione @option{--no-optimize}. @@ -4484,10 +4534,13 @@ sinistro e il conteggio delle chiamate di funzione per ogni funzione. @item @option{-P} @itemx @option{--posix} -@cindex @option{-P}, opzione -@cindex @option{--posix}, opzione -@cindex POSIX, modalit@`a -@cindex @command{gawk}, estensioni@comma{} disabilitare +@cindex @option{-P} (opzione) +@cindex opzione @subentry @option{-P} +@cindex @option{--posix} (opzione) +@cindex opzione @subentry @option{--posix} +@cindex POSIX @subentry modalit@`a +@cindex modalit@`a POSIX +@cindex @command{gawk} @subentry estensioni, disabilitare Opera in modalit@`a POSIX rigorosa. Disabilita tutte le estensioni di @command{gawk} (proprio come @option{--traditional}) e disabilita tutte le estensioni non consentite da POSIX. @@ -4501,21 +4554,21 @@ restrizioni: @itemize @value{BULLET} @cindex ritorno a capo -@cindex spazi vuoti, ritorno a capo invece che +@cindex spazi vuoti @subentry ritorno a capo come @item I ritorni a capo non sono consentiti dopo @samp{?} o @samp{:} (@pxref{Espressioni condizionali}). -@cindex @code{FS}, variabile, carattere TAB come -@cindex variabile @code{FS}, carattere TAB come +@cindex @code{FS} (variabile) @subentry carattere TAB come +@cindex variabile @subentry @code{FS} @subentry carattere TAB come @item Specificando @samp{-Ft} sulla riga di comando non si imposta il valore della variabile @code{FS} a un singolo carattere TAB (@pxref{Separatori di campo}). -@cindex localizzazione, separatore decimale della -@cindex separatore decimale, carattere, specifico della localizzazione +@cindex localizzazione @subentry separatore decimale della +@cindex separatore decimale @subentry carattere specifico della localizzazione @item Il carattere di separatore decimale della localizzazione @`e usato per analizzare i dati di input @@ -4524,17 +4577,21 @@ i dati di input @c @cindex automatic warnings @c @cindex warnings, automatic -@cindex @option{--traditional}, opzione, e opzione @code{--posix} -@cindex @option{--posix}, opzione, e opzione @code{--traditional} +@cindex @option{--traditional} (opzione) @subentry e opzione @code{--posix} +@cindex opzione @subentry @option{--traditional} @subentry e opzione @code{--posix} +@cindex @option{--posix} (opzione) @subentry e opzione @code{--traditional} +@cindex opzione @subentry @option{--posix} @subentry e opzione @code{--traditional} Se si forniscono entrambe le opzioni @option{--traditional} e @option{--posix} sulla riga di comando, @option{--posix} ha la precedenza. Se vengono fornite entrambe le opzioni @command{gawk} emette un avviso. @item @option{-r} @itemx @option{--re-interval} -@cindex @option{-r}, opzione -@cindex @option{--re-interval}, opzione -@cindex espressioni regolari, espressioni di intervallo e +@cindex @option{-r} (opzione) +@cindex opzione @subentry @option{-r} +@cindex @option{--re-interval} (opzione) +@cindex opzione @subentry @option{--re-interval} +@cindex espressioni regolari @subentry espressioni di intervallo e Consente le espressioni di intervallo (@pxref{Operatori di espressioni regolari}) nelle espressioni regolari. @@ -4544,21 +4601,23 @@ che per l'uso in combinazione con @option{--traditional}). @item @option{-s} @itemx @option{--no-optimize} -@cindex @option{--no-optimize}, opzione -@cindex opzione @option{--no-optimize} -@cindex @option{-s}, opzione, -@cindex opzione @option{-s} +@cindex @option{-s} (opzione) +@cindex opzione @subentry @option{-s} +@cindex @option{--no-optimize} (opzione) +@cindex opzione @subentry @option{--no-optimize} Disabilita le opzioni di ottimizzazione di default di @command{gawk} effettuate sulla rappresentazione interna del programma. @item @option{-S} @itemx @option{--sandbox} -@cindex @option{-S}, opzione -@cindex @option{--sandbox}, opzione -@cindex sandbox, modalit@`a -@cindex prova, modalit@`a di -@cindex @code{ARGV}, vettore -@cindex vettore @code{ARGV} +@cindex @option{-S} (opzione) +@cindex opzione @subentry @option{-S} +@cindex @option{--sandbox} (opzione) +@cindex opzione @subentry @option{--sandbox} +@cindex @dfn{sandbox} @subentry modalit@`a +@cindex prova @subentry modalit@`a di +@cindex @code{ARGV} (vettore) +@cindex vettore @subentry @code{ARGV} Disabilita la funzione @code{system()}, la ridirezione dell'input con @code{getline}, la ridirezione dell'output con @code{print} e @code{printf}, @@ -4571,37 +4630,50 @@ accesso al sistema (oltre al @value{DF} di input specificato). @item @option{-t} @itemx @option{--lint-old} -@cindex @option{-L}, opzione -@cindex @option{--lint-old}, opzione +@cindex @option{-t} (opzione) +@cindex opzione @subentry @option{-t} +@cindex @option{--lint-old} (opzione) +@cindex opzione @subentry @option{--lint-old} Avvisa su costrutti che non sono disponibili nella versione originale di @command{awk} dalla versione 7 di Unix (@pxref{V7/SVR3.1}). @item @option{-V} @itemx @option{--version} -@cindex @option{-V}, opzione -@cindex @option{--version}, opzione -@cindex @command{gawk}, versioni di, informazioni su@comma{} stampa +@cindex @option{-V} (opzione) +@cindex opzione @subentry @option{-V} +@cindex @option{--version} (opzione) +@cindex opzione @subentry @option{--version} +@cindex @command{gawk} @subentry versione di @subentry stampa informazioni su Stampa informazioni sulla versione di questa specifica copia di @command{gawk}. Consente di determinare se la copia di @command{gawk} in uso @`e aggiornata rispetto a quello che @`e attualmente in distribuzione da parte della Free Software Foundation. @`E utile anche per la segnalazione di bug (@pxref{Bug}). + +@cindex @code{-} (meno) @subentry @code{--} marcatore della fine delle opzioni +@cindex meno (@code{-}) @subentry @code{--} marcatore della fine delle opzioni +@item @code{--} +Marca la fine di tutte le opzioni. +Ogni argomento sulla riga di comando che segue @code{--} viene messo +nel vettore @code{ARGV}, anche se inizia con il segno meno (@code{-}). @end table Ogni altra opzione, se @`e stato specificato il testo di un programma @`e contrassegnata come non valida con un messaggio di avvertimento, altrimenti @`e ignorata. -@cindex @option{-F}, opzione, opzione @option{-Ft} imposta @code{FS} a TAB +@cindex @option{-F} (opzione) @subentry @option{-Ft} imposta @code{FS} a TAB +@cindex opzione @subentry @option{-F} @subentry opzione @option{-Ft} imposta @code{FS} a TAB In modalit@`a di compatibilit@`a, come caso particolare, se il valore di @var{fs} fornito all'opzione @option{-F} @`e @samp{t}, @code{FS} @`e impostata al carattere TAB (@code{"\t"}). Questo @`e vero solo per @option{--traditional} e non per @option{--posix} (@pxref{Separatori di campo}). -@cindex @option{-f}, opzione, usi multipli +@cindex @option{-f} (opzione) @subentry usi multipli +@cindex opzione @subentry @option{-f} @subentry usi multipli L'opzione @option{-f} pu@`o essere usata pi@`u di una volta nella riga di comando. In questo caso, @command{awk} legge il sorgente del suo programma da tutti i file indicati, come se fossere concatenati assieme a formare un unico grande @@ -4631,7 +4703,8 @@ facilmente codice sorgente da riga di comando e da libreria Come per @option{-f}, le opzioni @option{-e} e @option{-i} si possono usare pi@`u volte nella riga di comando. -@cindex @option{-e}, opzione +@cindex @option{-e} (opzione) +@cindex opzione @subentry @option{-e} Se non sono specificate le opzioni @option{-f} o @option{-e}, @command{gawk} usa il primo argomento diverso da un'opzione, presente sulla riga di comando, come testo del codice sorgente @@ -4640,9 +4713,12 @@ dopo il testo del programma sono inseriti nel vettore @code{ARGV}; @command{awk} @emph{non} continua ad analizzare la riga di comando alla ricerca di ulteriori opzioni. -@cindex @env{POSIXLY_CORRECT}, variabile d'ambiente -@cindex @dfn{lint}, controlli, variabile d'ambiente @env{POSIXLY_CORRECT} -@cindex POSIX, modalit@`a +@cindex @env{POSIXLY_CORRECT} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{POSIXLY_CORRECT} +@cindex @dfn{lint} @subentry controlli @env{POSIXLY_CORRECT} (variabile d'ambiente) +@cindex controllo @subentry @dfn{lint} @subentry @env{POSIXLY_CORRECT} (variabile d'ambiente) +@cindex POSIX @subentry modalit@`a +@cindex modalit@`a POSIX Se la variabile d'ambiente @env{POSIXLY_CORRECT} esiste, @command{gawk} si comporta in modalit@`a POSIX rigorosa, esattamente come se fosse stata fornita l'opzione @option{--posix}. @@ -4663,7 +4739,7 @@ POSIXLY_CORRECT=true export POSIXLY_CORRECT @end example -@cindex @command{csh}, comando, variabile d'ambiente @env{POSIXLY_CORRECT} +@cindex @command{csh} (comando di utilit@`a) @subentry variabile d'ambiente @env{POSIXLY_CORRECT} Per una shell compatibile con C,@footnote{Non raccomandato.} questa riga andr@`a aggiunta nel file @file{.login} nella directory "home" dell'utente: @@ -4672,20 +4748,20 @@ dell'utente: setenv POSIXLY_CORRECT true @end example -@cindex portabilit@`a, variabile d'ambiente @env{POSIXLY_CORRECT} +@cindex portabilit@`a @subentry variabile d'ambiente @env{POSIXLY_CORRECT} Avere @env{POSIXLY_CORRECT} impostata non @`e raccomandato per l'uso quotidiano, ma @`e utile per provare la portabilit@`a dei programmi su altri ambienti. @node Altri argomenti @section Altri argomenti della riga di comando -@cindex riga di comando, argomenti -@cindex argomenti, riga di comando +@cindex riga di comando @subentry argomenti +@cindex argomenti @subentry riga di comando Qualsiasi altro argomento sulla riga di comando @`e trattato normalmente come file in input da elaborare nell'ordine con cui @`e specificato. Comunque, un argomento che ha la forma @code{@var{var}=@var{valore}}, assegna -il valore @var{valore} alla variabile @var{var}---non specifica affatto +il valore @var{valore} alla variabile @var{var} --- non specifica affatto un file. (Si veda @ref{Opzioni di assegnamento}.) Nel seguente esempio, @var{count=1} @`e un assegnamento di variabile, non un @value{FN}: @@ -4703,10 +4779,10 @@ questione andr@`a fatto precedere da @samp{./}, come nell'esempio seguente: awk -f programma.awk file1 ./count=1 file2 @end example -@cindex @command{gawk}, variabile @code{ARGIND} in -@cindex @code{ARGIND}, variabile, argomenti da riga di comando -@cindex @code{ARGV}, vettore, indicizzare all'interno di -@cindex @code{ARGC}/@code{ARGV}, variabili, argomenti da riga di comando +@cindex @command{gawk} @subentry @code{ARGIND} (variabile) in +@cindex @code{ARGIND} (variabile) @subentry argomenti da riga di comando +@cindex @code{ARGV} (vettore) @subentry indicizzare all'interno di +@cindex @code{ARGC}/@code{ARGV} (variabili) @subentry argomenti da riga di comando Tutti gli argomenti da riga di comando sono resi disponibili al programma @command{awk} nel vettore @code{ARGV} (@pxref{Variabili predefinite}). Opzioni da riga di comando e il testo del programma (se presente) sono esclusi da @@ -4720,8 +4796,8 @@ La modifica di @code{ARGC} e @code{ARGV} nel proprio programma @command{awk} consente di controllare come @command{awk} elabora i file in input; questo @`e descritto pi@`u dettagliatamente in @ref{ARGC e ARGV}. -@cindex file in input, assegnamenti di variabile e -@cindex assegnamenti di variabile e file in input +@cindex input @subentry assegnamenti di variabile e +@cindex assegnamento @subentry di variabile e file in input La distinzione tra argomenti che sono @value{FN} e argomenti di assegnamento di variabili vien fatta quando @command{awk} deve aprire il successivo file di input. @@ -4737,7 +4813,7 @@ all'interno di una regola @code{BEGIN} poich@'e tali regole vengono eseguite prima che @command{awk} cominci a esaminare la lista degli argomenti. -@cindex angolo buio, sequenze di protezione +@cindex angolo buio @subentry sequenze di protezione I valori delle variabili dati sulla riga di comando sono elaborati per rimuovere sequenze di protezione (@pxref{Sequenze di protezione}). @value{DARKCORNER} @@ -4756,13 +4832,13 @@ applicazioni che dipendevano dal vecchio comportamento. La funzionalit@`a dell'assegnamento di variabile @`e molto utile per assegnare valori a variabili come @code{RS}, @code{OFS}, e @code{ORS}, che controllano i formati di input e di output, prima di effettuare la scansione dei @value{DF}. -@`E utile anche per effettuare passaggi multipli su un o stesso +@`E utile anche per effettuare passaggi multipli su uno stesso @value{DF}. Per esempio: -@cindex file, passaggi multipli su +@cindex file @subentry passaggi multipli su @example -awk 'pass == 1 @{ @var{pass 1 stuff} @} - pass == 2 @{ @var{pass 2 stuff} @}' pass=1 mydata pass=2 mydata +awk 'pass == 1 @{ @var{istruzioni pass 1} @} +pass == 2 @{ @var{istruzioni pass 2} @}' pass=1 mydata pass=2 mydata @end example Una volta disponibile la funzionalit@`a per assegnare una variabile, l'opzione @@ -4806,7 +4882,7 @@ operativo rende disponibile il file o no].) @node Variabili d'ambiente @section Le variabili d'ambiente usate da @command{gawk} -@cindex variabili d'ambiente usate da @command{gawk} +@cindex variabili d'ambiente @subentry usate da @command{gawk} Diverse variabili d'ambiente influiscono sul comportamento di @command{gawk}. @@ -4821,11 +4897,12 @@ di @command{gawk}. @node AWKPATH (Variabile) @subsection Ricerca di programmi @command{awk} in una lista di directory. -@cindex @env{AWKPATH}, variabile d'ambiente -@cindex directory, ricerca di file sorgente -@cindex percorso di ricerca per file sorgente -@cindex ricerca, percorso di, per file sorgente -@cindex differenze tra @command{awk} e @command{gawk}, variabile d'ambiente @env{AWKPATH} +@cindex @env{AWKPATH} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{AWKPATH} +@cindex directory @subentry ricerca di file sorgente +@cindex percorso di ricerca @subentry per file sorgente +@cindex ricerca @subentry percorso di, per file sorgente +@cindex differenze tra @command{awk} e @command{gawk} @subentry @env{AWKPATH} (variabile d'ambiente) @ifinfo Il precedente @value{SECTION} ha descritto come i file di programma di @command{awk} possono essere specificati sulla riga di comando con @@ -4919,10 +4996,10 @@ e @command{gawk} non ha pi@`u bisogno di usare @env{AWKPATH}. @node AWKLIBPATH (Variabile) @subsection Ricerca di librerie condivise @command{awk} su varie directory. -@cindex @env{AWKLIBPATH}, variabile d'ambiente -@cindex directory, ricerca di estensioni caricabili -@cindex percorso di ricerca per estensioni -@cindex differenze tra @command{awk} e @command{gawk}, variabile d'ambiente @code{AWKLIBPATH} +@cindex @env{AWKLIBPATH} (variabile d'ambiente) +@cindex directory @subentry ricerca di estensioni caricabili +@cindex percorso di ricerca @subentry per estensioni +@cindex differenze tra @command{awk} e @command{gawk} @subentry @code{AWKLIBPATH} (variabile d'ambiente) La variabile d'ambiente @env{AWKLIBPATH} @`e simile alla variabile @env{AWKPATH}, ma @`e usata per ricercare estensioni caricabili (memorizzate come @@ -5058,8 +5135,8 @@ possibili sprechi di memoria. @node Codice di ritorno @section Il codice di ritorno all'uscita da @command{gawk} -@cindex codice di ritorno, di @command{gawk} -@cindex stato d'uscita, di @command{gawk} +@cindex codice di ritorno @subentry di @command{gawk} +@cindex stato d'uscita @subentry di @command{gawk} Se l'istruzione @code{exit} viene usata con un valore (@pxref{Istruzione exit}), @command{gawk} termina l'esecuzione con il valore numerico specificato. @@ -5090,9 +5167,13 @@ Questo @value{SECTION} descrive una funzionalit@`a disponibile solo in @command{gawk}. -@cindex @code{@@include}, direttiva -@cindex direttiva @code{@@include} -@cindex includere file, direttiva @code{@@include} +@cindex @code{@@} (chiocciola) @subentry @code{@@include} (direttiva) +@cindex chiocciola (@code{@@}) @subentry @code{@@include} (direttiva) +@cindex direttiva @subentry @code{@@include} +@cindex file @subentry includere, direttiva @code{@@include} +@cindex caricare estensioni @subentry @code{@@load} (direttiva) +@cindex estensioni @subentry caricare @subentry @code{@@load} (direttiva) +@cindex includere file @subentry direttiva @code{@@include} La direttiva @code{@@include} pu@`o essere usata per leggere file sorgenti di @command{awk} esterni. Questo d@`a la possibilit@`a di suddividere file sorgenti di @command{awk} di grandi dimensioni in porzioni pi@`u piccole e pi@`u @@ -5110,7 +5191,7 @@ Iniziamo con due @dfn{script} @command{awk} (banali), che chiameremo @example BEGIN @{ - print "Questo @`e lo script test1." +print "Questo @`e lo script test1." @} @end example @@ -5120,7 +5201,7 @@ e questo @`e @file{test2}: @example @@include "test1" BEGIN @{ - print "Questo @`e lo script test2." +print "Questo @`e lo script test2." @} @end example @@ -5152,7 +5233,7 @@ I file da includere possono essere nidificati; p.es., dato un terzo @group @@include "test2" BEGIN @{ - print "Questo @`e lo script test3." +print "Questo @`e lo script test3." @} @end group @end example @@ -5231,10 +5312,10 @@ Questo @value{SECTION} descrive una funzionalit@`a disponibile solo in @command{gawk}. -@cindex @code{@@load}, direttiva -@cindex direttiva @code{@@load} -@cindex caricare estensioni, direttiva @code{@@load} -@cindex estensioni, caricamento, direttiva @code{@@load} +@cindex @code{@@} (chiocciola) @subentry @code{@@load} (direttiva) +@cindex chiocciola (@code{@@}) @subentry @code{@@load} (direttiva) +@cindex caricare estensioni @subentry direttiva @code{@@load} +@cindex estensioni @subentry caricare @subentry direttiva @code{@@load} La direttiva @code{@@load} pu@`o essere usata per leggere estensioni di @command{awk} esterne (memorizzate come librerie condivise di sistema). Questo consente di collegare del codice compilato che pu@`o offrire prestazioni @@ -5277,9 +5358,9 @@ che possono essere caricate sia con @code{@@load} che con l'opzione @c update this section for each release! -@cindex opzioni deprecate -@cindex funzionalit@`a deprecate -@cindex obsolete, funzionalit@`a +@cindex opzioni @subentry deprecate +@cindex funzionalit@`a @subentry deprecate +@cindex obsolete @subentry funzionalit@`a @ifnotinfo Questa @end ifnotinfo @@ -5306,8 +5387,8 @@ in case some option becomes obsolete in a future version of @command{gawk}. @node Non documentato @section Opzioni e funzionalit@`a non documentate -@cindex non documentate, funzionalit@`a -@cindex funzionalit@`a non documentate +@cindex non documentate @subentry funzionalit@`a +@cindex funzionalit@`a @subentry non documentate @cindex Skywalker, Luke @cindex Kenobi, Obi-Wan @cindex jedi, cavalieri @@ -5317,7 +5398,7 @@ in case some option becomes obsolete in a future version of @command{gawk}. @author Obi-Wan @end quotation -@cindex conchiglie, mare +@cindex conchiglie @subentry mare @ifnotinfo Questa @value{SECTION} @`e stata lasciata intenzionalmente vuota. @end ifnotinfo @@ -5365,7 +5446,7 @@ oppure: @example awk '@{ sum += $1 @} - END @{ print sum @}' data +END @{ print sum @}' data @end example @noindent @@ -5526,8 +5607,8 @@ Poich@'e le espressioni regolari sono una parte fondamentale della programmazione in @command{awk}, il loro formato e il loro uso meritano un @value{CHAPTER} a s@'e stante. -@cindex barra (@code{/}), per delimitare le espressioni regolari -@cindex @code{/} (barra), per delimitare le espressioni regolari +@cindex barra (@code{/}) @subentry per delimitare le espressioni regolari +@cindex @code{/} (barra) @subentry per delimitare le espressioni regolari Un'espressione regolare racchiusa tra barre (@samp{/}) @`e un modello di ricerca @command{awk} che individua tutti i record in input il cui testo corrisponde al modello stesso. @@ -5563,8 +5644,8 @@ complesse. @node Uso di @dfn{regexp} @section Uso di espressioni regolari -@cindex criteri di ricerca, espressioni regolari usate come -@cindex espressioni regolari, come criteri di ricerca +@cindex criteri di ricerca @subentry espressioni regolari come +@cindex espressioni regolari @subentry come criteri di ricerca Un'espressione regolare pu@`o essere usata come modello di ricerca racchiudendola tra barre. L'espressione regolare @`e quindi confrontata con tutto il testo di ogni record (normalmente, basta che corrisponda a @@ -5580,21 +5661,21 @@ $ @kbd{awk '/li/ @{ print $2 @}' mail-list} @print{} 555-3430 @end example -@cindex espressioni regolari, operatori -@cindex operatori, ricerca in stringhe +@cindex espressioni regolari @subentry operatori +@cindex operatori @subentry ricerca in stringhe @c @cindex operators, @code{~} -@cindex ricerca in stringhe, operatori -@cindex @code{~} (tilde), operatore @code{~} -@cindex tilde (@code{~}), operatore @code{~} -@cindex @code{!} (punto esclamativo), operatore @code{!~} -@cindex punto esclamativo (@code{!}), operatore @code{!~} -@c @cindex operatori, @code{!~} -@cindex @code{if}, istruzione, uso di espressioni regolari in -@cindex @code{while}, istruzione, uso di espressioni regolari in -@cindex @code{do}-@code{while}, istruzione, uso di espressioni regolari in -@c @cindex istruzione @code{if} -@c @cindex istruzione @code{while} -@c @cindex istruzione @code{do} +@cindex ricerca @subentry in stringhe, operatori +@cindex @code{~} (tilde) @subentry operatore @code{~} +@cindex tilde (@code{~}) @subentry operatore @code{~} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!~} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!~} +@c @cindex operators, @code{!~} +@cindex @code{if} (istruzione) @subentry uso di espressioni regolari in +@cindex @code{while} (istruzione) @subentry uso di espressioni regolari in +@cindex @code{do}-@code{while} (istruzione) @subentry uso di espressioni regolari in +@c @cindex statement @code{if} +@c @cindex statement @code{while} +@c @cindex statement @code{do} Espressioni regolari possono anche essere usate in espressioni di confronto. Queste espressioni consentono di specificare le stringhe da riconoscere; non devono necessariamente comprendere l'intero record corrente. I due @@ -5649,9 +5730,9 @@ $ @kbd{awk '$1 !~ /J/' inventory-shipped} @dots{} @end example -@cindex @dfn{regexp}, costanti -@cindex costanti @dfn{regexp} -@cindex espressioni regolari, costanti, si veda costanti @dfn{regexp} +@cindex @dfn{regexp} @subentry costanti +@cindex costanti @subentry @dfn{regexp} +@cindex espressioni regolari @subentry costanti @seeentry{costanti @dfn{regexp}} Quando una @dfn{regexp} @`e racchiusa tra barre, come @code{/pippo/}, la chiamiamo una @dfn{costante regexp}, proprio come @code{5.27} @`e una costante numerica e @code{"pippo"} @`e una costante [di tipo] stringa. @@ -5659,9 +5740,10 @@ numerica e @code{"pippo"} @`e una costante [di tipo] stringa. @node Sequenze di protezione @section Sequenze di protezione -@cindex sequenze di protezione, in stringhe -@cindex barra inversa (@code{\}), in sequenze di protezione -@cindex @code{\} (barra inversa), in sequenze di protezione +@cindex sequenze di protezione +@cindex sequenze di protezione @subentry in stringhe +@cindex barra inversa (@code{\}) @subentry in sequenze di protezione +@cindex @code{\} (barra inversa) @subentry in sequenze di protezione Alcuni caratteri non possono essere inclusi letteralmente in costanti stringa (@code{"pippo"}) o in costanti @dfn{regexp} (@code{/pippo/}). Vanno invece rappresentati usando @dfn{sequenze di protezione}, @@ -5691,50 +5773,51 @@ tutte le sequenze di protezione usate in @command{awk} e cosa rappresentano. Se non @`e detto altrimenti, tutte queste sequenze di protezione valgono sia per costanti stringa che per costanti @dfn{regexp}: +@cindex ASCII @table @code @item \\ Barra inversa letterale, @samp{\}. @c @cindex @command{awk} language, V.4 version -@cindex @code{\} (barra inversa), @code{\a}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\a}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\a} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\a} (sequenza di protezione) @item \a Il carattere ``campanello'', @kbd{Ctrl-g}, codice ASCII 7 (BEL). (Spesso genera qualche tipo di segnale sonoro udibile.) -@cindex @code{\} (barra inversa), @code{\b}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\b}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\b} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\b} (sequenza di protezione) @item \b Barra inversa, @kbd{Ctrl-h}, codice ASCII 8 (BS). -@cindex @code{\} (barra inversa), @code{\f}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\f}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\f} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\f} (sequenza di protezione) @item \f Nuova pagina, @kbd{Ctrl-l}, codice ASCII 12 (FF). -@cindex @code{\} (barra inversa), @code{\n}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\n}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\n} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\n} (sequenza di protezione) @item \n A-capo, @kbd{Ctrl-j}, codice ASCII 10 (LF). -@cindex @code{\} (barra inversa), @code{\r}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\r}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\r} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\r} (sequenza di protezione) @item \r Ritorno-a-capo, @kbd{Ctrl-m}, codice ASCII 13 (CR). -@cindex @code{\} (barra inversa), @code{\t}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\t}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\t} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\t} (sequenza di protezione) @item \t Tabulazione orizzontale, @kbd{Ctrl-i}, codice ASCII 9 (HT). @c @cindex @command{awk} language, V.4 version -@cindex @code{\} (barra inversa), @code{\v}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\v}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\v} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\v} (sequenza di protezione) @item \v Tabulazione verticale, @kbd{Ctrl-k}, codice ASCII 11 (VT). -@cindex @code{\} (barra inversa), @code{\}@var{nnn}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\}@var{nnn}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\}@var{nnn} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\}@var{nnn} (sequenza di protezione) @item \@var{nnn} Il valore ottale @var{nnn}, dove @var{nnn} pu@`o essere da 1 a 3 cifre ottali, tra @samp{0} e @samp{7}. Per esempio, il codice per il carattere ASCII ESC @@ -5742,10 +5825,10 @@ tra @samp{0} e @samp{7}. Per esempio, il codice per il carattere ASCII ESC @c @cindex @command{awk} language, V.4 version @c @cindex @command{awk} language, POSIX version -@cindex @code{\} (barra inversa), @code{\x}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\x}, sequenza di protezione -@cindex comuni, estensioni@comma{} @code{\x}, sequenza di protezione -@cindex estensioni comuni, @code{\x}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\x} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\x} (sequenza di protezione) +@cindex comuni @subentry estensioni @subentry @code{\x}, sequenza di protezione +@cindex estensioni comuni @subentry @code{\x} (sequenza di protezione) @item \x@var{hh}@dots{} Il valore esadecimale @var{hh}, dove @var{hh} indica una sequenza di cifre esadecimali (@samp{0}--@samp{9}, e @samp{A}--@samp{F} @@ -5765,8 +5848,8 @@ Dalla @value{PVERSION} 4.2, vengono elaborate solo due cifre. @end quotation -@cindex @code{\} (barra inversa), @code{\/}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\/}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\/} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\/} (sequenza di protezione) @item \/ Una barra (necessario solo per costanti @dfn{regexp}). Questa sequenza si usa per inserire una costante @dfn{regexp} @@ -5784,8 +5867,8 @@ Poich@'e una @dfn{regexp} @`e racchiusa tra barre, si deve proteggere ogni barra che sia parte dell'espressione, per dire ad @command{awk} di andare avanti a scandire il resto della @dfn{regexp}. -@cindex @code{\} (barra inversa), @code{\"}, sequenza di protezione -@cindex barra inversa (@code{\}), @code{\"}, sequenza di protezione +@cindex @code{\} (barra inversa) @subentry @code{\"} (sequenza di protezione) +@cindex barra inversa (@code{\}) @subentry @code{\"} (sequenza di protezione) @item \" Un doppio apice (necessario solo per costanti stringa). Questa sequenza si usa per inserire in una costante stringa il carattere @@ -5807,27 +5890,27 @@ significa che il carattere seguente dovrebbe essere preso letteralmente, anche se normalmente sarebbe un operatore di @dfn{regexp}. Per esempio, @code{/a\+b/} individua i tre caratteri @samp{a+b}. -@cindex barra inversa (@code{\}), in sequenze di protezione -@cindex @code{\} (barra inversa), in sequenze di protezione +@cindex barra inversa (@code{\}) @subentry in sequenze di protezione +@cindex @code{\} (barra inversa) @subentry in sequenze di protezione @cindex portabilit@`a Per una completa portabilit@`a, non usare una barra inversa prima di qualsiasi carattere non incluso nella lista precedente, o che non sia un operatore. @c 11/2014: Moved so as to not stack sidebars @sidebar Barra inversa prima di un carattere normale -@cindex portabilit@`a, barra inversa in sequenze di protezione -@cindex POSIX @command{awk}, barre inverse in costanti stringa -@cindex barra inversa (@code{\}), in sequenze di protezione, POSIX e -@cindex @code{\} (barra inversa), in sequenze di protezione, POSIX e +@cindex portabilit@`a @subentry barra inversa in sequenze di protezione +@cindex POSIX @command{awk} @subentry barre inverse in costanti stringa +@cindex barra inversa (@code{\}) @subentry in sequenze di protezione @subentry POSIX e +@cindex @code{\} (barra inversa) @subentry in sequenze di protezione @subentry POSIX e -@cindex risoluzione di problemi, barra inversa prima di caratteri non speciali -@cindex problemi, risoluzione di, barra inversa prima di caratteri non speciali +@cindex risoluzione di problemi @subentry barra inversa prima di caratteri non speciali +@cindex problemi @subentry risoluzione di @subentry barra inversa prima di caratteri non speciali Se si mette una barra inversa in una costante stringa prima di qualcosa che non sia uno dei caratteri elencati sopra, POSIX @command{awk} di proposito lascia indefinito il comportamento. Ci sono due possibilit@`a: @c @cindex automatic warnings @c @cindex warnings, automatic -@cindex Brian Kernighan, @command{awk} di +@cindex Brian Kernighan @subentry @command{awk} di @table @asis @item Togliere la barra inversa Questo @`e quel che sia BWK @command{awk} che @command{gawk} fanno. @@ -5840,10 +5923,11 @@ occorre mettere due barre inverse nella stringa: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.) @c I did this! This is why I added the warning. -@cindex @command{gawk}, sequenze di protezione -@cindex Unix @command{awk}, barre inverse in sequenze di protezione -@cindex @command{mawk}, programma di utilit@`a -@cindex programma di utilit@`a @command{mawk} +@cindex @command{gawk} @subentry sequenze di protezione +@cindex @command{gawk} @subentry sequenze di protezione @seealso{barra inversa} +@cindex Unix @command{awk} @subentry barra inversa in sequenze di protezione +@cindex @command{mawk} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{mawk} @item Tenere la barra inversa cos@`{@dotless{i}} com'@`e. Alcune altre implementazioni di @command{awk} fanno questo. In quelle implementazioni, immettere @code{"a\qc"} equivale a immettere @@ -5870,7 +5954,7 @@ carattere letteralmente. @end itemize @sidebar Sequenze di protezione per metacaratteri -@cindex metacaratteri, sequenze di protezione per +@cindex metacaratteri @subentry sequenze di protezione per Supponiamo che si usi una protezione ottale o esadecimale per rappresentare un metacarattere di @dfn{regexp} @@ -5878,7 +5962,7 @@ per rappresentare un metacarattere di @dfn{regexp} @command{awk} considera il carattere come un carattere letterale o come un operatore di @dfn{regexp}? -@cindex angolo buio, sequenze di protezione, per metacaratteri +@cindex angolo buio @subentry sequenze di protezione @subentry per metacaratteri Storicamente, tali caratteri erano considerati letteralmente. @value{DARKCORNER} Invece, lo standard POSIX richiede che siano considerati @@ -5891,8 +5975,8 @@ letteramente, quando sono usati in costanti @dfn{regexp}. Quindi, @node Operatori di espressioni regolari @section Operatori di espressioni regolari -@cindex espressioni regolari, operatori -@cindex metacaratteri in espressioni regolari +@cindex espressioni regolari @subentry operatori +@cindex metacaratteri @subentry in espressioni regolari @`E possibile inserire in espressioni regolari dei caratteri speciali, detti @dfn{operatori di espressioni regolari} o @dfn{metacaratteri}, per @@ -5920,18 +6004,17 @@ di protezione e che non sono elencati qui rappresentano se stessi: @c Use @asis so the docbook comes out ok. Sigh. @table @asis -@cindex barra inversa (@code{\}), operatore @dfn{regexp} -@cindex barra inversa (@code{\}), operatore @dfn{regexp} -@cindex @code{\} (barra inversa), operatore @dfn{regexp} +@cindex barra inversa (@code{\}) @subentry operatore @dfn{regexp} +@cindex @code{\} (barra inversa) @subentry operatore @dfn{regexp} @item @code{\} Si usa per togliere il significato speciale a un carattere quando si effettuano confronti. Per esempio, @samp{\$} individua il carattere @samp{$}. -@cindex espressioni regolari, ancore nelle -@cindex Texinfo, inizi di capitolo nei file -@cindex @code{^} (circonflesso), operatore @dfn{regexp} -@cindex circonflesso (@code{^}), operatore @dfn{regexp} +@cindex espressioni regolari @subentry @`ancore nelle +@cindex Texinfo @subentry inizi di capitolo nei file +@cindex @code{^} (circonflesso) @subentry operatore @dfn{regexp} +@cindex circonflesso (@code{^}) @subentry operatore @dfn{regexp} @item @code{^} Si usa per indicare l'inizio di una stringa. Per esempio, @samp{^@@chapter} individua @samp{@@chapter} all'inizio di una stringa e si pu@`o usare per @@ -5947,8 +6030,8 @@ di una stringa. La condizione non @`e verificata nell'esempio seguente: if ("riga1\nRIGA 2" ~ /^R/) @dots{} @end example -@cindex @code{$} (dollaro), operatore @dfn{regexp} -@cindex dollaro (@code{$}), operatore @dfn{regexp} +@cindex @code{$} (dollaro) @subentry operatore @dfn{regexp} +@cindex dollaro (@code{$}) @subentry operatore @dfn{regexp} @item @code{$} Simile a @samp{^}, ma serve a indicare la fine di una stringa. Per esempio, @samp{p$} @@ -5962,8 +6045,8 @@ La condizione nell'esempio seguente non @`e verificata: if ("riga1\nRIGA 2" ~ /1$/) @dots{} @end example -@cindex @code{.} (punto), operatore @dfn{regexp} -@cindex punto (@code{.}), operatore @dfn{regexp} +@cindex @code{.} (punto) @subentry operatore @dfn{regexp} +@cindex punto (@code{.}) @subentry operatore @dfn{regexp} @item @code{.} (punto) Individua un qualsiasi carattere, @emph{incluso} il carattere di ritorno a capo. Per esempio, @samp{.P} @@ -5972,7 +6055,9 @@ Usando la concatenazione, si pu@`o formare un'espressione regolare come @samp{U.A}, che individua qualsiasi sequenza di tre caratteri che inizia con @samp{U} e finisce con @samp{A}. -@cindex POSIX @command{awk}, uso del punto (@code{.}) +@cindex POSIX @subentry modalit@`a +@cindex modalit@`a POSIX +@cindex POSIX @command{awk} @subentry uso del punto (@code{.}) In modalit@`a POSIX stretta (@pxref{Opzioni}), @samp{.} non individua il carattere @sc{nul}, ossia il carattere con tutti i bit uguali a zero. @@ -5980,17 +6065,17 @@ In altri contesti, @sc{nul} @`e solo un carattere qualsiasi. Altre versioni di @command{awk} possono non essere in grado di individuare il carattere @sc{nul}. -@cindex @code{[]} (parentesi quadre), operatore @dfn{regexp} -@cindex parentesi quadre (@code{[]}), operatore @dfn{regexp} -@cindex espressioni tra parentesi -@cindex insiemi di caratteri, si veda anche espressioni tra parentesi quadre -@cindex liste di caratteri, si veda espressioni tra parentesi quadre -@cindex classi di caratteri, si veda espressioni tra parentesi quadre +@cindex @code{[]} (parentesi quadre) @subentry operatore @dfn{regexp} +@cindex parentesi @subentry quadre (@code{[]}) @subentry operatore @dfn{regexp} +@cindex espressioni @subentry tra parentesi quadre +@cindex insiemi di caratteri (in espressioni regolari) @seeentry{espressioni tra parentesi quadre} +@cindex liste di caratteri @seeentry{espressioni tra parentesi quadre} +@cindex classi di caratteri @seeentry{espressioni tra parentesi quadre} @item @code{[}@dots{}@code{]} Questa @`e chiamata una @dfn{espressione tra parentesi quadre}.@footnote{In altri testi, un'espressione tra parentesi quadre potrebbe essere definita come @dfn{insieme di caratteri}, @dfn{classe di caratteri} o - @dfn{lista di caratteri}.} +@dfn{lista di caratteri}.} Individua @emph{uno} qualsiasi dei caratteri racchiusi tra parentesi quadre. Per esempio, @samp{[MVX]} individua uno qualsiasi dei caratteri @samp{M}, @samp{V}, o @samp{X} in una stringa. Una spiegazione @@ -5998,7 +6083,7 @@ esauriente di quel che si pu@`o mettere all'interno di un'espressione tra parentesi quadre @`e data in @ref{Espressioni tra parentesi quadre}. -@cindex espressioni tra parentesi quadre, complementate +@cindex espressioni @subentry tra parentesi quadre @subentry complementate @item @code{[^}@dots{}@code{]} Questa @`e una @dfn{espressione tra parentesi quadre complementata}. Il primo carattere dopo la @samp{[} @emph{deve} essere un @samp{^}. Individua @@ -6019,8 +6104,8 @@ qualsiasi posizione al suo interno) una vocale inglese minuscola. L'alternativa si applica alle @dfn{regexp} pi@`u ampie individuabili in ogni lato. -@cindex @code{()} (parentesi), operatore @dfn{regexp} -@cindex parentesi (@code{()}), operatore @dfn{regexp} +@cindex @code{()} (parentesi) @subentry operatore @dfn{regexp} +@cindex parentesi @subentry (@code{()}) @subentry operatore @dfn{regexp} @item @code{(}@dots{}@code{)} Le parentesi sono usate per raggruppare, sia nelle espressioni regolari sia in quelle aritmetiche. Si possono usare per concatenare espressioni regolari @@ -6039,8 +6124,8 @@ relativa parentesi sinistra; una parentesi destra senza la corrispondente parentesi sinistra @`e considerata (senza dare alcun messaggio di avviso) come un normale carattere. -@cindex @code{*} (asterisco), operatore @code{*}, come operatore @dfn{regexp} -@cindex asterisco (@code{*}), operatore @code{*}, come operatore @dfn{regexp} +@cindex @code{*} (asterisco) @subentry operatore @code{*} @subentry come operatore @dfn{regexp} +@cindex asterisco (@code{*}) @subentry operatore @code{*} @subentry come operatore @dfn{regexp} @item @code{*} Questo simbolo richiede che la precedente espressione regolare sia ripetuta tante volte quanto serve per trovare una corrispondenza. Per @@ -6061,23 +6146,25 @@ Secondo, @samp{*} trova quante pi@`u ripetizioni siano possibili. Se il testo da ricercare @`e @samp{phhhhhhhhhhhhhhooey}, @samp{ph*} individua tutte le @samp{h}. -@cindex @code{+} (pi@`u), operatore @dfn{regexp} -@cindex pi@`u (@code{+}), operatore @dfn{regexp} +@cindex @code{+} (pi@`u) @subentry operatore @dfn{regexp} +@cindex pi@`u (@code{+}) @subentry operatore @dfn{regexp} @item @code{+} Questo simbolo @`e simile a @samp{*}, tranne per il fatto che l'espressione precedente deve essere trovata almeno una volta. Questo significa che @samp{wh+y} individuerebbe @samp{why} e @samp{whhy}, ma non @samp{wy}, mentre @samp{wh*y} li troverebbe tutti e tre. -@cindex @code{?} (punto interrogativo), operatore @dfn{regexp} -@cindex punto interrogativo (@code{?}), operatore @dfn{regexp} +@cindex @code{?} (punto interrogativo) @subentry operatore @dfn{regexp} +@cindex punto interrogativo (@code{?}) @subentry operatore @dfn{regexp} @item @code{?} Questo simbolo @`e simile a @samp{*}, tranne per il fatto che l'espressione che precede pu@`o essere trovata una volta sola oppure non trovata affatto. Per esempio, @samp{fe?d} individua @samp{fed} e @samp{fd}, ma nient'altro. -@cindex espressioni di intervallo, (@dfn{regexp}) +@cindex @code{@{@}} (parentesi graffe) @subentry operatore @dfn{regexp} +@cindex parentesi @subentry graffe (@code{@{@}}) @subentry operatore @dfn{regexp} +@cindex espressioni @subentry di intervallo @subentry (@dfn{regexp}) @item @code{@{}@var{n}@code{@}} @itemx @code{@{}@var{n}@code{,@}} @itemx @code{@{}@var{n}@code{,}@var{m}@code{@}} @@ -6102,8 +6189,8 @@ Riconosce @samp{whhy}, @samp{whhhy} e cos@`{@dotless{i}} via. @end table @end table -@cindex precedenza, operatori @dfn{regexp} -@cindex espressioni regolari, operatori, precedenza degli +@cindex precedenza @subentry operatori @dfn{regexp} +@cindex espressioni regolari @subentry operatori @subentry precedenza degli Nelle espressioni regolari, gli operatori @samp{*}, @samp{+}, e @samp{?}, come pure le parentesi graffe @samp{@{} e @samp{@}}, hanno @@ -6112,8 +6199,8 @@ la precedenza pi@`u alta, seguite dalla concatenazione, e poi da Come nell'algebra, le parentesi possono cambiare il raggruppamento degli operatori. -@cindex POSIX @command{awk}, espressioni regolari e -@cindex @command{gawk}, espressioni regolari, precedenza +@cindex POSIX @command{awk} @subentry espressioni regolari +@cindex @command{gawk} @subentry espressioni regolari @subentry precedenza In POSIX @command{awk} e @command{gawk}, gli operatori @samp{*}, @samp{+} e @samp{?} rappresentano se stessi quando non c'@`e nulla prima di essi nella @dfn{regexp}. Per esempio, @code{/+/} individua un semplice segno @@ -6123,12 +6210,12 @@ tale notazione come un errore di sintassi. @node Espressioni di intervallo @subsection Alcune note sulle espressioni di intervallo -@cindex POSIX @command{awk}, espressioni di intervallo in +@cindex POSIX @command{awk} @subentry espressioni di intervallo Le espressioni di intervallo non erano tradizionalmente disponibili in @command{awk}. Sono state aggiunte come parte dello standard POSIX per rendere @command{awk} ed @command{egrep} coerenti tra di loro. -@cindex @command{gawk}, espressioni di intervallo e +@cindex @command{gawk} @subentry espressioni di intervallo e In passato, poich@'e vecchi programmi possono usare @samp{@{} e @samp{@}} in costanti @dfn{regexp}, @command{gawk} @emph{non} riconosceva espressioni di intervallo @@ -6161,12 +6248,12 @@ eseguito in modalit@`a compatibile (@pxref{Opzioni}). @node Espressioni tra parentesi quadre @section Usare espressioni tra parentesi quadre -@cindex espressioni tra parentesi quadre -@cindex espressioni tra parentesi quadre, espressioni di intervallo -@cindex espressioni di intervallo, (@dfn{regexp}) +@cindex espressioni @subentry tra parentesi quadre +@cindex espressioni @subentry tra parentesi quadre @subentry espressioni di intervallo +@cindex espressioni @subentry di intervallo @subentry (@dfn{regexp}) @cindex elenchi di caratteri in espressioni regolari -@cindex caratteri, elenchi di, in espressioni regolari -@cindex espressioni regolari, elenchi di caratteri in +@cindex caratteri @subentry elenchi di, in espressioni regolari +@cindex espressioni regolari @subentry elenchi di caratteri in Come detto sopra, un'espressione tra parentesi quadre individua qualsiasi carattere incluso tra le parentesi quadre aperta e chiusa. @@ -6192,12 +6279,12 @@ caratteri in cui i punti di inizio e fine dell'intervello abbiano valori maggiori di 256, occorre immettere direttamente le codifiche multi-byte dei caratteri in questione. -@cindex @code{\} (barra inversa), in espressioni tra parentesi quadre -@cindex barra inversa (@code{\}), in espressioni tra parentesi quadre -@cindex @code{^} (circonflesso), in espressioni tra parentesi quadre -@cindex circonflesso (@code{^}), in espressioni tra parentesi quadre -@cindex @code{-} (meno), in espressioni tra parentesi quadre -@cindex meno (@code{-}), in espressioni tra parentesi quadre +@cindex @code{\} (barra inversa) @subentry in espressioni tra parentesi quadre +@cindex barra inversa (@code{\}) @subentry in espressioni tra parentesi quadre +@cindex @code{^} (circonflesso) @subentry in espressioni tra parentesi quadre +@cindex circonflesso (@code{^}) @subentry in espressioni tra parentesi quadre +@cindex @code{-} (meno) @subentry in espressioni tra parentesi quadre +@cindex meno (@code{-}) @subentry in espressioni tra parentesi quadre Per includere uno dei caratteri @samp{\}, @samp{]}, @samp{-}, o @samp{^} in un'espressione tra parentesi quadre, occorre inserire un @samp{\} prima del carattere stesso. Per esempio: @@ -6212,11 +6299,11 @@ Inoltre, se si mette una @samp{]} subito dopo la @samp{[} aperta, la parentesi quadra chiusa @`e considerata come uno dei caratteri da individuare. -@cindex POSIX @command{awk}, espressioni tra parentesi quadre e -@cindex espressioni regolari estese (ERE) +@cindex POSIX @command{awk} @subentry espressioni tra parentesi quadre +@cindex espressioni regolari @subentry estese (ERE) @cindex ERE (espressioni regolari estese) -@cindex @command{egrep}, programma di utilit@`a -@cindex programma di utilit@`a @command{egrep} +@cindex @command{egrep} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{egrep} L'utilizzo di @samp{\} nelle espressioni tra parentesi quadre @`e compatibile con altre implementazioni di @command{awk} ed @`e anche richiesto da POSIX. @@ -6225,8 +6312,8 @@ specificazioni POSIX per le espressioni regolari estese (ERE). Le ERE POSIX sono basate sulle espressioni regolari accettate dal tradizionale programma di utilit@`a @command{egrep}. -@cindex espressioni tra parentesi quadre, classi di caratteri -@cindex POSIX @command{awk}, espressioni tra parentesi quadre e, classi di caratteri +@cindex espressioni @subentry tra parentesi quadre @subentry classi di caratteri +@cindex POSIX @command{awk} @subentry espressioni tra parentesi quadre @subentry classi di caratteri Le @dfn{classi di caratteri} sono una funzionalit@`a introdotta nello standard POSIX. Una classe di caratteri @`e una particolare notazione per descrivere liste di caratteri cha hanno un attributo specifico, ma i caratteri @@ -6284,10 +6371,10 @@ Subject: Re: [bug-gawk] Does gawk character classes follow this? > From: arnold@skeeve.com > Date: Fri, 15 Feb 2019 03:01:34 -0700 > Cc: pengyu.ut@gmail.com, bug-gawk@gnu.org -> +> > I get the feeling that there's something really bothering you, but > I don't understand what. -> +> > Can you clarify, please? I thought I already did: we cannot be expected to provide a definitive @@ -6298,6 +6385,7 @@ depends on various factors out of our control. @c Thanks to @c Date: Tue, 01 Jul 2014 07:39:51 +0200 @c From: Hermann Peifer <peifer@gmx.eu> +@cindex ASCII Alcuni programmi di utilit@`a che cercano espressioni regolari prevedono una classe di caratteri, non standard, @samp{[:ascii:]}; @command{awk} non la prevede. Tuttavia, @`e possibile ottenere @@ -6313,9 +6401,9 @@ trattano @code{[:blank:]} come @code{[:space:]}, individuando quindi pi@`u caratteri del dovuto. Caveat Emptor! [Stia in guardia il compratore!]. @end quotation -@cindex espressioni tra parentesi quadre, elementi di collazione -@cindex espressioni tra parentesi quadre, non-ASCII -@cindex elementi di collazione +@cindex espressioni @subentry tra parentesi quadre @subentry elementi di collazione +@cindex espressioni @subentry tra parentesi quadre @subentry non-ASCII +@cindex elementi @subentry di collazione In espressioni tra parentesi quadre possono apparire due ulteriori sequenze speciali. Riguardano insiemi di caratteri non-ASCII, che possono avere simboli singoli (chiamati @dfn{elementi di collazione}) che sono rappresentati @@ -6325,8 +6413,8 @@ equivalenti tra loro ai fini della @dfn{collazione}, o dell'ordinamento. sono equivalenti). Queste sequenze sono: @table @asis -@cindex espressioni tra parentesi quadre, elementi di collazione -@cindex elementi di collazione +@cindex espressioni @subentry tra parentesi quadre @subentry elementi di collazione +@cindex elementi @subentry di collazione @item elementi di collazione Elementi di collazione multi-byte racchiusi fra @samp{[.} e @samp{.]}. Per esempio, se @samp{ch} @`e un elemento di collazione, @@ -6334,7 +6422,7 @@ Elementi di collazione multi-byte racchiusi fra collazione, mentre @samp{[ch]} @`e una @dfn{regexp} che individua le lettere @samp{c} o @samp{h}. -@cindex espressioni tra parentesi quadre, classi di equivalenza +@cindex espressioni @subentry tra parentesi quadre @subentry classi di equivalenza @item classi di equivalenza Sono nomi, specifici a una particolare localizzazione, per una lista di caratteri equivalenti tra loro. Il nome @`e racchiuso fra @@ -6346,9 +6434,9 @@ che corrisponde a @samp{e}, @samp{@^e}, @samp{@`e} e @samp{@'e}. Queste funzionalit@`a sono molto utili in localizzazioni non inglesi. -@cindex internazionalizzazione, localizzazione, classi di caratteri -@cindex @command{gawk}, classi di caratteri e -@cindex POSIX @command{awk}, espressioni tra parentesi quadre e, classi di caratteri +@cindex internazionalizzazione @subentry localizzazione @subentry classi di caratteri +@cindex @command{gawk} @subentry classi di caratteri e +@cindex POSIX @command{awk} @subentry espressioni tra parentesi quadre @subentry classi di caratteri @quotation ATTENZIONE Le funzioni di libreria che @command{gawk} usa per individuare le espressioni regolari per ora riconoscono solo le classi di caratteri POSIX; @@ -6364,7 +6452,7 @@ caratteri, di simboli di collazione o di una classe di equivalenza @node Pi@`u lungo da sinistra @section Quanto @`e lungo il testo individuato? -@cindex espressioni regolari, corrispondenza pi@`u a sinistra +@cindex espressioni regolari @subentry corrispondenza pi@`u a sinistra @c @cindex matching, leftmost longest Si consideri il caso seguente: @@ -6404,12 +6492,12 @@ e anche @pxref{Separatori di campo}). @node Espressioni regolari calcolate @section Usare @dfn{regexp} dinamiche -@cindex espressioni regolari calcolate -@cindex espressioni regolari dinamiche -@cindex @code{~} (tilde), operatore @code{~} -@cindex tilde (@code{~}), operatore @code{~} -@cindex @code{!} (punto esclamativo), operatore @code{!~} -@cindex punto esclamativo (@code{!}), operatore @code{!~} +@cindex espressioni regolari @subentry calcolate +@cindex espressioni regolari @subentry dinamiche +@cindex @code{~} (tilde) @subentry operatore @code{~} +@cindex tilde (@code{~}) @subentry operatore @code{~} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!~} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!~} @c @cindex operators, @code{~} @c @cindex operators, @code{!~} L'espressione a destra di un operatore @samp{~} o @samp{!~} non deve @@ -6443,11 +6531,11 @@ alla sua destra. Questo vale per ogni espressione (come la costanti stringa. @end quotation -@cindex costanti @dfn{regexp}, barre vs.@: doppi apici -@cindex @code{\} (barra inversa), in costanti @dfn{regexp} -@cindex barra inversa (@code{\}), in costanti @dfn{regexp} -@cindex @code{"} (doppio apice), in costanti @dfn{regexp} -@cindex doppio apice (@code{"}), in costanti @dfn{regexp} +@cindex costanti @subentry @dfn{regexp} @subentry barre vs.@: doppi apici +@cindex @code{\} (barra inversa) @subentry in costanti @dfn{regexp} +@cindex barra inversa (@code{\}) @subentry in costanti @dfn{regexp} +@cindex @code{"} (doppio apice) @subentry in costanti @dfn{regexp} +@cindex doppio apice (@code{"}) @subentry in costanti @dfn{regexp} Che differenza fa la doppia scansione di una stringa? La risposta ha a che vedere con le sequenze di protezione e particolarmente con le barre inverse. Per inserire una barra inversa in un'espressione @@ -6461,10 +6549,10 @@ occorre immettere @code{"\\*"}. La prima barra inversa protegge la seconda in modo che la stringa in realt@`a contenga i due caratteri @samp{\} e @samp{*}. -@cindex risoluzione di problemi, costanti @dfn{regexp} vs.@: costanti stringa -@cindex problemi, risoluzione di, costanti @dfn{regexp} vs.@: costanti stringa -@cindex costanti @dfn{regexp}, vs.@: costanti stringa -@cindex costanti stringa, vs.@: costanti @dfn{regexp} +@cindex risoluzione di problemi @subentry costanti @dfn{regexp} vs.@: costanti stringa +@cindex problemi @subentry risoluzione di @subentry costanti @dfn{regexp} vs.@: costanti stringa +@cindex costanti @subentry @dfn{regexp} @subentry vs.@: costanti stringa +@cindex costanti @subentry stringa @subentry vs.@: costanti @dfn{regexp} Dato che si possono usare sia costanti @dfn{regexp} che costanti stringa per descrivere espressioni regolari, qual @`e da preferire? La risposta @`e ``costanti @dfn{regexp}'', per molti motivi: @@ -6489,8 +6577,8 @@ chiaramente che si vuole una corrispondenza con una @dfn{regexp}. @end itemize @sidebar Usare @code{\n} in espressioni tra parentesi quadre in @dfn{regexp} dinamiche -@cindex espressioni regolari dinamiche, contenenti dei ritorni a capo -@cindex ritorno a capo, in @dfn{regexp} dinamiche +@cindex espressioni regolari @subentry dinamiche @subentry contenenti dei ritorni a capo +@cindex ritorno a capo @subentry in @dfn{regexp} dinamiche Alcune delle prime versioni di @command{awk} non consentono di usare il carattere di ritorno a capo @@ -6506,7 +6594,7 @@ $ @kbd{awk '$0 ~ "[ \t\n]"'} @error{} $0 ~ "[ >>> \t\n]" <<< @end example -@cindex ritorno a capo, in costanti @dfn{regexp} +@cindex ritorno a capo @subentry in costanti @dfn{regexp} Ma un ritorno a capo in una costante @dfn{regexp} non d@`a alcun problema: @example @@ -6525,11 +6613,11 @@ in pratica, ma val la pena di notarlo a futura memoria. @c This section adapted (long ago) from the regex-0.12 manual -@cindex espressioni regolari, operatori, @command{gawk} -@cindex @command{gawk}, espressioni regolari, operatori -@cindex operatori, specifici per GNU -@cindex espressioni regolari, operatori, per parole -@cindex parola, definizione in @dfn{regexp} +@cindex espressioni regolari @subentry operatori @subentry @command{gawk} +@cindex @command{gawk} @subentry espressioni regolari @subentry operatori +@cindex operatori @subentry specifici per GNU +@cindex espressioni regolari @subentry operatori @subentry per parole +@cindex parola @subentry definizione in @dfn{regexp} Il software GNU che ha a che fare con espressioni regolari comprende alcuni operatori @dfn{regexp} aggiuntivi. Questi operatori sono descritti in @@ -6547,67 +6635,67 @@ parole. Ai nostri fini, una @dfn{parola} @`e una sequenza di uno o pi@`u letter cifre, o trattini bassi (@samp{_}): @table @code -@c @cindex operatori, @code{\s} (@command{gawk}) -@cindex barra inversa (@code{\}), @code{\s}, operatore (@command{gawk}) -@cindex @code{\} (barra inversa), @code{\s}, operatore (@command{gawk}) +@c @cindex operators, @code{\s} (@command{gawk}) +@cindex barra inversa (@code{\}) @subentry @code{\s} (operatore @command{gawk}) +@cindex @code{\} (barra inversa) @subentry @code{\s} (operatore @command{gawk}) @item \s Corrisponde a ogni carattere bianco. Lo si pu@`o pensare come un'abbreviazione di @w{@samp{[[:space:]]}}. -@c @cindex operatori, @code{\S} (@command{gawk}) -@cindex barra inversa (@code{\}), @code{\S}, operatore (@command{gawk}) -@cindex @code{\} (barra inversa), @code{\S}, operatore (@command{gawk}) +@c @cindex operators, @code{\S} (@command{gawk}) +@cindex barra inversa (@code{\}) @subentry @code{\S} (operatore @command{gawk}) +@cindex @code{\} (barra inversa) @subentry @code{\S} (operatore @command{gawk}) @item \S Corrisponde a ogni carattere che non @`e uno spazio bianco. Lo si pu@`o pensare come un'abbreviazione di @w{@samp{[^[:space:]]}}. -@c @cindex operatori, @code{\w} (@command{gawk}) -@cindex barra inversa (@code{\}), @code{\w}, operatore (@command{gawk}) -@cindex @code{\} (barra inversa), @code{\w}, operatore (@command{gawk}) +@c @cindex operators, @code{\w} (@command{gawk}) +@cindex barra inversa (@code{\}) @subentry @code{\w} (operatore @command{gawk}) +@cindex @code{\} (barra inversa) @subentry @code{\w} (operatore @command{gawk}) @item \w Corrisponde a ogni carattere che componga una parola; ovvero, corrisponde a ogni lettera, cifra, o trattino basso. Lo si pu@`o pensare come un'abbreviazione di @w{@samp{[[:alnum:]_]}}. -@c @cindex operatori, @code{\W} (@command{gawk}) -@cindex barra inversa (@code{\}), @code{\W}, operatore (@command{gawk}) -@cindex @code{\} (barra inversa), @code{\W}, operatore (@command{gawk}) +@c @cindex operators, @code{\W} (@command{gawk}) +@cindex barra inversa (@code{\}) @subentry @code{\W} (operatore @command{gawk}) +@cindex @code{\} (barra inversa) @subentry @code{\W} (operatore @command{gawk}) @item \W Corrisponde a ogni carattere che non @`e parte di una parola. Lo si pu@`o pensare come un'abbreviazione di @w{@samp{[^[:alnum:]_]}}. -@c @cindex operatori, @code{\<} (@command{gawk}) -@cindex barra inversa (@code{\}), @code{\<}, operatore (@command{gawk}) -@cindex @code{\} (barra inversa), @code{\<}, operatore (@command{gawk}) +@c @cindex operators, @code{\<} (@command{gawk}) +@cindex barra inversa (@code{\}) @subentry @code{\<} (operatore @command{gawk}) +@cindex @code{\} (barra inversa) @subentry @code{\<} (operatore @command{gawk}) @item \< Individua la stringa nulla all'inizio di una parola. Per esempio, @code{/\<via/} individua @samp{via} ma non @samp{funivia}. -@c @cindex operatori, @code{\>} (@command{gawk}) -@cindex barra inversa (@code{\}), @code{\>}, operatore (@command{gawk}) -@cindex @code{\} (barra inversa), @code{\>}, operatore (@command{gawk}) +@c @cindex operators, @code{\>} (@command{gawk}) +@cindex barra inversa (@code{\}) @subentry @code{\>} (operatore @command{gawk}) +@cindex @code{\} (barra inversa) @subentry @code{\>} (operatore @command{gawk}) @item \> Individua la stringa nulla alla fine di una parola. Per esempio, @code{/via\>/} individua @samp{via} ma non @samp{viadotto}. -@c @cindex operatori, @code{\y} (@command{gawk}) -@cindex barra inversa (@code{\}), @code{\y}, operatore (@command{gawk}) -@cindex @code{\} (barra inversa), @code{\y}, operatore (@command{gawk}) -@cindex limite-di-parola, individuare il +@c @cindex operators, @code{\y} (@command{gawk}) +@cindex barra inversa (@code{\}) @subentry @code{\y} (operatore @command{gawk}) +@cindex @code{\} (barra inversa) @subentry @code{\y} (operatore @command{gawk}) +@cindex limite-di-parola @subentry individuare il @item \y Individua la stringa nulla o alla fine o all'inizio di una parola. (cio@`e, il limite di una parola - @dfn{boundar@strong{y}} in inglese). Per esempio, @samp{\yradar?\y} individua sia @samp{rada} che @samp{radar}, come parole separate. -@c @cindex operatori, @code{\B} (@command{gawk}) -@cindex barra inversa (@code{\}), @code{\B}, operatore (@command{gawk}) -@cindex @code{\} (barra inversa), @code{\B}, operatore (@command{gawk}) +@c @cindex operators, @code{\B} (@command{gawk}) +@cindex barra inversa (@code{\}) @subentry @code{\B} (operatore @command{gawk}) +@cindex @code{\} (barra inversa) @subentry @code{\B} (operatore @command{gawk}) @item \B Individua la stringa nulla che ricorre all'interno di una parola. Per esempio, @@ -6615,9 +6703,9 @@ Per esempio, @samp{\B} @`e essenzialmente l'opposto di @samp{\y}. @end table -@cindex buffer, operatori per -@cindex espressioni regolari, operatori, per buffer -@cindex operatori, ricerca in stringhe, per buffer +@cindex buffer @subentry operatori per +@cindex espressioni regolari @subentry operatori @subentry per buffer +@cindex operatori @subentry ricerca in stringhe @subentry per buffer Ci sono due altri operatori che operano sui buffer. In Emacs un @dfn{buffer} @`e, naturalmente, un buffer di Emacs. In altri programmi GNU, fra cui @command{gawk}, le routine di libreria delle @dfn{regexp} considerano @@ -6626,32 +6714,32 @@ Gli operatori sono: @table @code @item \` -@c @cindex operatori, @code{\`} (@command{gawk}) -@cindex barra inversa (@code{\}), @code{\`}, operatore (@command{gawk}) -@cindex @code{\} (barra inversa), @code{\`}, operatore (@command{gawk}) +@c @cindex operators, @code{\`} (@command{gawk}) +@cindex barra inversa (@code{\}) @subentry @code{\`} (operatore @command{gawk}) +@cindex @code{\} (barra inversa) @subentry @code{\`} (operatore @command{gawk}) Individua la stringa nulla che occorre all'inizio di un buffer (di una stringa) -@c @cindex operatori, @code{\'} (@command{gawk}) -@cindex barra inversa (@code{\}), @code{\'}, operatore (@command{gawk}) -@cindex @code{\} (barra inversa), @code{\'}, operatore (@command{gawk}) +@c @cindex operators, @code{\'} (@command{gawk}) +@cindex barra inversa (@code{\}) @subentry @code{\'} (operatore @command{gawk}) +@cindex @code{\} (barra inversa) @subentry @code{\'} (operatore @command{gawk}) @item \' Individua la stringa nulla che occorre alla fine di un buffer (di una stringa) @end table -@cindex @code{^} (circonflesso), operatore @dfn{regexp} -@cindex circonflesso (@code{^}), operatore @dfn{regexp} -@cindex @code{?} (punto interrogativo), operatore @dfn{regexp} -@cindex punto interrogativo (@code{?}), operatore @dfn{regexp} +@cindex @code{^} (circonflesso) @subentry operatore @dfn{regexp} +@cindex circonflesso (@code{^}) @subentry operatore @dfn{regexp} +@cindex @code{?} (punto interrogativo) @subentry operatore @dfn{regexp} +@cindex punto interrogativo (@code{?}) @subentry operatore @dfn{regexp} Poich@'e @samp{^} e @samp{$} si riferiscono sempre all'inizio e alla fine di stringhe, questi operatori non aggiungono nuove funzionalit@`a ad @command{awk}. Sono inclusi per compatibilit@`a con altro software GNU. -@cindex @command{gawk}, operatore limite-di-parola -@cindex limite-di-parola, operatore (@command{gawk}) -@cindex operatori, limite-di-parola (@command{gawk}) +@cindex @command{gawk} @subentry operatore limite-di-parola +@cindex limite-di-parola @subentry operatore (@command{gawk}) +@cindex operatori @subentry limite-di-parola (@command{gawk}) In altro software GNU, l'operatore di limite-di-parola @`e @samp{\b}. Questo, comunque, @`e in conflitto con la definizione, nel linguaggio @command{awk}, di @samp{\b} come @@ -6661,8 +6749,8 @@ operatori GNU, ma questo @`e stato ritenuto troppo arzigogolato. Il metodo corrente di usare @samp{\y} al posto del @samp{\b} di GNU sembra essere il male minore. -@cindex espressioni regolari, @command{gawk}, opzioni sulla riga di comando -@cindex @command{gawk}, opzioni sulla riga di comando, ed espressioni regolari +@cindex espressioni regolari @subentry @command{gawk} @subentry opzioni sulla riga di comando +@cindex @command{gawk} @subentry opzioni sulla riga di comando @subentry ed espressioni regolari Le varie opzioni sulla riga di comando (@pxref{Opzioni}) controllano come @command{gawk} interpreta i caratteri nelle @dfn{regexp}: @@ -6687,7 +6775,7 @@ Sono ammesse solo le @dfn{regexp} POSIX; gli operatori GNU non sono speciali (p.es., @samp{\w} individua una semplice lettera @samp{w}). Le espressioni di intervallo sono ammesse. -@cindex Brian Kernighan, @command{awk} di +@cindex Brian Kernighan @subentry @command{awk} di @item @code{--traditional} Le @dfn{regexp} Unix tradizionali di @command{awk} sono ammesse. Gli operatori GNU non sono speciali, e le espressioni @@ -6706,9 +6794,9 @@ Altrimenti, le espressioni di intervallo sono disponibili per default. @node Maiuscolo-Minuscolo @section Fare confronti ignorando maiuscolo/minuscolo -@cindex espressioni regolari, maiuscolo/minuscolo -@cindex @dfn{regexp}, maiuscolo/minuscolo -@cindex maiuscolo/minuscolo e @dfn{regexp} +@cindex espressioni regolari @subentry maiuscolo/minuscolo +@cindex @dfn{regexp} @subentry maiuscolo/minuscolo +@cindex maiuscolo/minuscolo @subentry @dfn{regexp} e Il tipo di carattere (maiuscolo/minuscolo) @`e normalmente rilevante nelle espressioni regolari, sia nella ricerca di caratteri normali (cio@`e, non metacaratteri), sia all'interno di espressioni @@ -6738,15 +6826,15 @@ tolower($1) ~ /foo/ @{ @dots{} @} converte il primo campo in minuscole, prima di fare un confronto. Questo funziona in ogni @command{awk} conforme allo standard POSIX. -@cindex @command{gawk}, espressioni regolari, differenza maiuscolo/minuscolo -@cindex distinzione maiuscolo/minuscolo, @command{gawk} -@cindex differenze tra @command{awk} e @command{gawk}, espressioni regolari -@cindex @code{~} (tilde), operatore @code{~} -@cindex tilde (@code{~}), operatore @code{~} -@cindex @code{!} (punto esclamativo), operatore @code{!~} -@cindex punto esclamativo (@code{!}), operatore @code{!~} -@cindex @code{IGNORECASE}, variabile, con operatori @code{~} e @code{!~} -@cindex @command{gawk}, variabile @code{IGNORECASE} in +@cindex @command{gawk} @subentry espressioni regolari @subentry distinzione maiuscolo/minuscolo +@cindex distinzione maiuscolo/minuscolo @subentry @command{gawk} +@cindex differenze tra @command{awk} e @command{gawk} @subentry espressioni regolari +@cindex @code{~} (tilde) @subentry operatore @code{~} +@cindex tilde (@code{~}) @subentry operatore @code{~} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!~} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!~} +@cindex @code{IGNORECASE} (variabile) @subentry con operatori @code{~} e @code{!~} +@cindex @command{gawk} @subentry variabile @subentry @code{IGNORECASE} in @c @cindex variables, @code{IGNORECASE} Un altro metodo, proprio di @command{gawk}, @`e di impostare la variabile @code{IGNORECASE} a un valore diverso da zero (@pxref{Variabili predefinite}). @@ -6858,11 +6946,11 @@ versioni di @command{awk}, vanno usate invece le funzioni @code{tolower()} o @node Leggere file @chapter Leggere file in input -@cindex leggere file in input -@cindex file in input, leggere -@cindex file in input -@cindex @code{FILENAME}, variabile -@cindex variabile @code{FILENAME} +@cindex leggere @subentry file in input +@cindex input @subentry leggere +@cindex input +@cindex @code{FILENAME} (variabile) +@cindex variabile @subentry @code{FILENAME} Nel tipico programma @command{awk}, @command{awk} legge tutto l'input sia dallo standard input (per default @`e la tastiera, ma spesso @`e una @dfn{pipe} da un altro comando) @@ -6881,7 +6969,7 @@ Per default, ogni record @`e una riga. Ogni record @`e suddiviso automaticamente in "pezzi" chiamati @dfn{campi}. Questo rende pi@`u pratico far lavorare i programmi sulle parti di un record. -@cindex @code{getline}, comando +@cindex @code{getline} (comando) In rare occasioni, si potrebbe aver bisogno di usare il comando @code{getline}. Il comando @code{getline} @`e utile sia perch@'e pu@`o procurare un input esplicito da un numero indeterminato di file, sia perch@'e non vanno @@ -6916,10 +7004,10 @@ getline (@pxref{Getline}). @node Record @section Controllare come i dati sono suddivisi in record -@cindex input, suddividere in record -@cindex record, suddividere l'input in -@cindex @code{NR}, variabile -@cindex @code{FNR}, variabile +@cindex input @subentry suddividere in record +@cindex record @subentry suddividere l'input in +@cindex @code{NR} (variabile) +@cindex @code{FNR} (variabile) @command{awk} suddivide l'input per il programma in record e campi. Tiene traccia del numero di record gi@`a letti dal file in input corrente. Questo valore @`e memorizzato in una variabile @@ -6945,18 +7033,18 @@ regolare. Questo meccanismo @`e spiegato pi@`u in dettaglio qui sotto. @node awk divisione record @subsection Come @command{awk} standard divide i record. -@cindex separatori di record -@cindex record, separatori di +@cindex separatore di record +@cindex record @subentry separatore di I record sono separati da un carattere chiamato @dfn{separatore di record}. Per default, il separatore di record @`e il carattere di ritorno a capo. Questo @`e il motivo per cui i record sono, per default, righe singole. Per usare un diverso carattere come separatore di record basta assegnare quel carattere alla variabile predefinita @code{RS}. -@cindex separatore di record, ritorno a capo come -@cindex ritorno a capo, come separatore di record -@cindex a capo, come separatore di record -@cindex @code{RS}, variabile +@cindex separatore di record @subentry ritorno a capo come +@cindex ritorno a capo @subentry come separatore di record +@cindex ritorno a capo @subentry come separatore di record +@cindex @code{RS} (variabile) Come per ogni altra variabile, il valore di @code{RS} pu@`o essere cambiato nel programma @command{awk} con l'operatore di assegnamento, @samp{=} @@ -6971,7 +7059,7 @@ Per esempio: @example awk 'BEGIN @{ RS = "u" @} - @{ print $0 @}' mail-list +@{ print $0 @}' mail-list @end example @noindent @@ -7049,8 +7137,9 @@ il record, diversamente dalle altre, che hanno una o pi@`u ricorrenze della il ritorno a capo che li separa nell'output @`e l'originale ritorno a capo nel @value{DF}, non quella aggiunta da @command{awk} quando ha stampato il record! -@cindex separatori di record, cambiare i -@cindex record, separatori di +@cindex separatore di record @subentry cambiare il +@cindex cambiare @subentry il separatore di record +@cindex record @subentry separatore di Un altro modo per cambiare il separatore di record @`e sulla riga di comando, usando la funzionalit@`a dell'assegnamento di variabile (@pxref{Altri argomenti}): @@ -7093,14 +7182,14 @@ variabile predefinita @code{NF} @`e il numero di campi nel record corrente. vuoto, stampando @samp{0} come risultato. Anche molte altre versioni di @command{awk} agiscono in questo modo.) -@cindex angolo buio, file in input +@cindex angolo buio @subentry file in input Il raggiungimento della fine di un file in input fa terminare il record di input corrente, anche se l'ultimo carattere nel file non @`e il carattere in @code{RS}. @value{DARKCORNER} -@cindex stringa vuota +@cindex stringa @subentry vuota @seeentry{stringa nulla} @cindex stringa nulla -@c @cindex strings, empty, see null strings +@cindex stringa @subentry vuota @seeentry{stringa nulla} La stringa nulla @code{""} (una stringa che non contiene alcun carattere) ha un significato particolare come valore di @code{RS}. Significa che i record sono separati @@ -7112,14 +7201,14 @@ Se si cambia il valore di @code{RS} nel mezzo di un'esecuzione di non riguarda il record in corso di elaborazione e neppure quelli gi@`a elaborati. -@cindex @command{gawk}, variabile @code{RT} in -@cindex @code{RT}, variabile -@cindex record, fine dei -@cindex differenze tra @command{awk} e @command{gawk}, separatori di record -@cindex differenze tra @command{awk} e @command{gawk}, variabili @code{RS}/@code{RT} -@cindex espressioni regolari, come separatori di record -@cindex record, separatori di, espressioni regolari come -@cindex separatori di record, espressioni regolari come +@cindex @command{gawk} @subentry variabile @subentry @code{RT} in +@cindex @code{RT} (variabile) +@cindex record @subentry fine dei +@cindex differenze tra @command{awk} e @command{gawk} @subentry separatore di record +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabili @code{RS}/@code{RT} +@cindex espressioni regolari @subentry come separatore di record +@cindex record @subentry separatore di @subentry espressioni regolari come +@cindex separatore di record @subentry espressioni regolari come Dopo che @`e stata determinata la fine di un record, @command{gawk} imposta la variabile @code{RT} al testo nell'input che corrisponde a @code{RS}. @@ -7127,8 +7216,8 @@ imposta la variabile @code{RT} al testo nell'input che corrisponde a @node gawk divisione record @subsection Divisione dei record con @command{gawk} -@cindex estensioni comuni, @code{RS} come espressione regolare -@cindex comuni, estensioni@comma{} @code{RS} come espressione regolare +@cindex estensioni comuni @subentry @code{RS} come espressione regolare +@cindex comuni @subentry estensioni @subentry @code{RS} come espressione regolare Quando si usa @command{gawk}, il valore di @code{RS} non @`e limitato a una stringa costituita da un solo carattere. Se contiene pi@`u di un carattere, @`e considerato essere @@ -7199,10 +7288,10 @@ in cui possono essere presenti dei caratteri di ritorno a capo. @`E meglio perci@`o evitare metacaratteri di ancoraggio nel valore di @code{RS}. @end quotation -@cindex @command{gawk}, variabile @code{RT} in -@cindex @code{RT}, variabile -@cindex variabile @code{RT} -@cindex differenze tra @command{awk} e @command{gawk}, variabili @code{RS}/@code{RT} +@cindex @command{gawk} @subentry variabile @subentry @code{RT} in +@cindex @code{RT} (variabile) +@cindex variabile @subentry @code{RT} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabili @code{RS}/@code{RT} L'uso di @code{RS} come espressione regolare e la variabile @code{RT} sono estensioni @command{gawk}; non sono disponibili in modalit@`a compatibile @@ -7211,7 +7300,7 @@ In modalit@`a compatibile, solo il primo carattere del valore di @code{RS} determina la fine del record. @sidebar @code{RS = "\0"} non @`e portabile -@cindex portabilit@`a, file di dati come un unico record +@cindex portabilit@`a @subentry file di dati come un unico record Ci sono casi in cui capita di dover trattare un intero @value{DF} come un record unico. L'unico modo di far questo @`e quello di dare a @code{RS} un valore che non ricorre nel file in input. Ci@`o @`e difficile da fare in modo @@ -7226,7 +7315,7 @@ usare per @code{RS} in questo caso: BEGIN @{ RS = "\0" @} # l'intero file diventa un record? @end example -@cindex differenze tra @command{awk} e @command{gawk}, stringhe, memorizzazione +@cindex differenze tra @command{awk} e @command{gawk} @subentry memorizzazione di stringhe @command{gawk} di fatto lo accetta, e usa il carattere @sc{NUL} come separatore di record. Questo funziona per certi file speciali, come @file{/proc/environ} su sistemi @@ -7234,7 +7323,7 @@ GNU/Linux, dove il carattere @sc{NUL} @`e di fatto un separatore di record.. Comunque, quest'uso @emph{non} @`e portabile sulla maggior parte delle implementazioni di @command{awk}. -@cindex angolo buio, stringhe, memorizzazione +@cindex angolo buio @subentry stringhe, memorizzazine di Quasi tutte le altre implementazioni di @command{awk} @footnote{Almeno quelle che ci sono note.} memorizzano internamente le stringhe come stringhe in stile C. Le stringhe in stile C usano il carattere @sc{NUL} come @@ -7247,10 +7336,11 @@ Capita che recenti versioni di @command{mawk} possano usare i carattere @command{mawk} non consente di includere caratteri @sc{NUL} nelle stringhe. (Ci@`o potrebbe cambiare in una versione futura di @command{mawk}.) -@cindex record, trattare file come un solo +@cindex record @subentry trattare file come un solo @cindex trattare un file come un solo record -@cindex record unico, trattare un file come un -@cindex unico record, trattare un file come un +@cindex file @subentry trattato come un solo record +@cindex record unico @subentry trattare file come un solo +@cindex unico record @subentry trattare un file come un @xref{Funzione readfile} per un modo interessante di leggere file interi. Se si usa @command{gawk}, si veda @ref{Esempio di estensione Readfile} per un'altra opzione. @@ -7262,7 +7352,7 @@ file interi. Se si usa @command{gawk}, si veda @cindex esaminare i campi @cindex campi @cindex accesso ai campi -@cindex campi, esame dei +@cindex campi @subentry esame dei Quando @command{awk} legge un record in input, il record @`e automaticamente @dfn{analizzato} o separato da @command{awk} in "pezzi" chiamati @dfn{campi}. Per default, i campi sono separati da @@ -7274,14 +7364,14 @@ sono considerati spazi vuoti in altri linguaggi, @emph{non} sono considerati tali da @command{awk}. Lo scopo dei campi @`e quello di rendere pi@`u conveniente per l'utente far -riferimento a questi frammenti dei record. Non @`e necessario usarli---si pu@`o -operare sull'intero record, se si vuole---ma i campi sono ci@`o che rende +riferimento a questi frammenti dei record. Non @`e necessario usarli --- si pu@`o +operare sull'intero record, se si vuole --- ma i campi sono ci@`o che rende cos@`{@dotless{i}} potenti dei semplici programmi @command{awk}. -@cindex operatore di campo @code{$} -@cindex @code{$} (dollaro), operatore di campo @code{$} -@cindex dollaro (@code{$}), operatore di campo @code{$} -@cindex operatore di campo, dollaro come +@cindex operatore @subentry di campo @subentry @code{$} +@cindex @code{$} (dollaro) @subentry operatore di campo @code{$} +@cindex dollaro (@code{$}) @subentry operatore di campo @code{$} +@cindex operatore @subentry di campo @subentry dollaro come Si usa il simbolo del dollaro (@samp{$}) per far riferimento a un campo in un programma @command{awk}, seguito dal numero del campo desiderato. Quindi, @code{$1} @@ -7301,8 +7391,8 @@ Qui il primo campo, o @code{$1}, @`e @samp{Questo}, il secondo campo, o @samp{o} e il @samp{.}, il punto @`e considerato parte del settimo campo. -@cindex @code{NF}, variabile -@cindex campi, numero dei +@cindex @code{NF} (variabile) +@cindex campi @subentry numero dei @code{NF} @`e una variabile predefinita il cui valore @`e il numero di campi nel record corrente. @command{awk} aggiorna automaticamente il valore di @code{NF} ogni volta che legge un record. Indipendentemente da quanti campi @@ -7340,8 +7430,8 @@ $ @kbd{awk '/li/ @{ print $1, $NF @}' mail-list} @node Campi non costanti @section Numeri di campo variabili -@cindex campi, numero dei -@cindex numeri di campo +@cindex campi @subentry numero dei +@cindex numero @subentry di campi in un record Un numero di campo non @`e necessario che sia una costante. Nel linguaggio @command{awk} si pu@`o usare qualsiasi espressione dopo @samp{$} per far @@ -7391,14 +7481,15 @@ implementazioni di @command{awk} possono comportarsi in modo diverso.) Come accennato in @ref{Campi}, @command{awk} memorizza il numero di campi del record corrente nella variabile predefinita @code{NF} (@pxref{Variabili predefinite}). Quindi, -l'espressione @code{$NF} non @`e una funzionalit@`a speciale---@`e la diretta +l'espressione @code{$NF} non @`e una funzionalit@`a speciale --- @`e la diretta conseguenza della valutazione di @code{NF} e dell'uso di questo valore come numero di campo. @node Cambiare i campi @section Cambiare il contenuto di un campo -@cindex campi, cambiare il contenuto dei +@cindex campi @subentry cambiare il contenuto dei +@cindex cambiare @subentry il contenuto dei campi Il contenuto di un campo, cos@`{@dotless{i}} come @`e visto da @command{awk}, pu@`o essere cambiato all'interno di un programma @command{awk}; questo cambia quello che @command{awk} percepisce come record in input corrente. (Il reale file in @@ -7459,8 +7550,8 @@ $ @kbd{awk '@{ $6 = ($5 + $4 + $3 + $2)} @dots{} @end example -@cindex aggiungere, campi -@cindex campi, aggiungere +@cindex aggiungere @subentry campi +@cindex campi @subentry aggiungere @noindent Abbiamo appena creato @code{$6}, il cui valore @`e la somma dei campi @code{$2}, @code{$3}, @code{$4} e @code{$5}. Il segno @samp{+} @@ -7473,10 +7564,10 @@ record in input corrente, che @`e il valore di @code{$0}. Cos@`{@dotless{i}}, s nuovo campo, col numero di separatori di campo appropriati tra esso e i campi originariamente presenti. -@cindex @code{OFS}, variabile -@cindex output, separatore di campo, si veda @code{OFS}, variabile -@cindex campo, separatori di, si veda anche @code{OFS} -@cindex separatori di campo, si veda anche @code{OFS} +@cindex @code{OFS} (variabile) +@cindex output @subentry separatore di campo @seeentry{@code{OFS} (variabile)} +@cindex campi @subentry separatore di @seealso{@code{OFS}} +@cindex separatore di campo @seealso{@code{OFS} (variabile)} Questa ridefinizione influenza ed @`e influenzata da @code{NF} (il numero dei campi; @pxref{Campi}). Per esempio, il valore di @code{NF} @`e impostato al numero del campo pi@`u @@ -7492,9 +7583,9 @@ Per esempio: @example if ($(NF+1) != "") - print "non @`e possibile" +print "non @`e possibile" else - print "@`e tutto normale" +print "@`e tutto normale" @end example @noindent @@ -7532,8 +7623,8 @@ Il campo intermedio, @code{$5}, @`e creato con un valore vuoto (indicato dalla seconda coppia di due punti (@code{:}) adiacenti), e @code{NF} @`e aggiornato col valore sei. -@cindex angolo buio, variabile @code{NF}, decremento -@cindex @code{NF}, variable, decremento +@cindex angolo buio @subentry variabile @subentry @code{NF}, decremento +@cindex @code{NF} (variabile) @subentry decremento Decrementando @code{NF} si eliminano i campi dopo il nuovo valore di @code{NF} e si ricalcola @code{$0}. @value{DARKCORNER} @@ -7546,7 +7637,7 @@ $ @kbd{echo a b c d e f | awk '@{ print "NF =", NF;} @print{} a b c @end example -@cindex portabilit@`a, variabile @code{NF}@comma{} decremento +@cindex portabilit@`a @subentry variabile @code{NF}, decrementare @quotation ATTENZIONE Alcune versioni di @command{awk} non ricostruiscono @code{$0} quando @code{NF} viene diminuito. @@ -7612,9 +7703,9 @@ in precedenza. sommario. @end menu -@cindex @code{FS}, variabile -@cindex campi, separare -@cindex campo, separatori di +@cindex @code{FS} (variabile) +@cindex campi @subentry separare +@cindex campi @subentry separatore di Il @dfn{separatore di campo}, che @`e un carattere singolo o un'espressione regolare, controlla il modo in cui @command{awk} suddivide un record in input in campi. @command{awk} fa una scansione del record in input per trovare i @@ -7634,14 +7725,15 @@ moo goo gai pan @samp{@bullet{}gai@bullet{}pan}. Notare gli spazi iniziali nei valori del secondo e del terzo campo. -@cindex risoluzione di problemi, @command{awk} usa @code{FS} anzich@'e @code{IFS} -@cindex problemi, risoluzione di, @command{awk} usa @code{FS} anzich@'e @code{IFS} +@cindex risoluzione di problemi @subentry @command{awk} usa @code{FS} anzich@'e @code{IFS} +@cindex problemi @subentry risoluzione di @subentry @command{awk} usa @code{FS} anzich@'e @code{IFS} Il separatore di campo @`e rappresentato dalla variable predefinita @code{FS}. I programmatori di shell notino: @command{awk} @emph{non} usa il nome @code{IFS} che @`e usato dalle shell conformi a POSIX (come la Unix Bourne shell, @command{sh}, o Bash). -@cindex @code{FS}, variabile, cambiare il valore di una +@cindex @code{FS} (variabile) @subentry cambiare il valore della +@cindex cambiare @subentry il valore di @code{FS} (variabile) Il valore di @code{FS} si pu@`o cambiare nel programma @command{awk} con l'operatore di assegnamento, @samp{=} (@pxref{Operatori di assegnamento}). Spesso il momento giusto per far ci@`o @`e all'inizio dell'esecuzione @@ -7657,7 +7749,7 @@ Per esempio, qui impostiamo il valore di @code{FS} alla stringa awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}' @end example -@cindex @code{BEGIN}, criterio di ricerca +@cindex @code{BEGIN} (regola) @noindent Data la riga in input: @@ -7669,9 +7761,9 @@ John Q. Smith, 29 Oak St., Walamazoo, MI 42139 questo programma @command{awk} estrae e stampa la stringa @samp{@bullet{}29@bullet{}Oak@bullet{}St.}. -@cindex separatori di campo, scelta dei -@cindex espressioni regolari, come separatori di campo -@cindex separatori di campo, espressioni regolari come +@cindex separatore di campo @subentry scelta del +@cindex espressioni regolari @subentry come separatore di campo +@cindex separatore di campo @subentry espressioni regolari come A volte i dati in input contengono caratteri separatori che non separano i campi nel modo in cui ci si sarebbe atteso. Per esempio, il nome della persona dell'esempio che abbiamo appena usato potrebbe avere un @@ -7694,8 +7786,10 @@ si possano manipolare con un programma @command{awk} separato.) @node Separatori di campo di default @subsection Lo spazio vuoto normalmente separa i campi -@cindex separatori di campo, spazi vuoti come -@cindex spazi vuoti, come separatori di campo +@cindex separatore di campo @subentry spazi vuoti come +@cindex spazi vuoti @subentry come separatore di campo +@cindex separatore di campo @subentry @code{FS} (variabile) come +@cindex @code{FS} (variabile) @subentry come separatore di campo I campi sono separati normalmente da spazi vuoti (spazi, tabulazioni e ritorni a capo), non solo da spazi singoli. Due spazi in una riga non delimitano un campo vuoto. Il valore di default del separatore @@ -7716,8 +7810,8 @@ regole. @node Separare campi con @dfn{regexp} @subsection Usare @dfn{regexp} come separatori di campo -@cindex espressioni regolari, come separatori di campo -@cindex separatori di campo, espressioni regolari come +@cindex espressioni regolari @subentry come separatore di campo +@cindex separatore di campo @subentry espressioni regolari come La precedente @value{SUBSECTION} ha illustrato l'uso di caratteri singoli o di stringhe semplici come valore di @code{FS}. @@ -7775,9 +7869,8 @@ $ @kbd{echo ' a b c d ' | awk 'BEGIN @{ FS = "[ \t\n]+" @}} @end example @noindent -@c @cindex null strings @cindex stringa nulla -@cindex stringa vuota, si veda stringa nulla +@cindex stringa @subentry vuota @seeentry{stringa nulla} In questo caso, il primo campo @`e nullo, o vuoto. Il taglio degli spazi vuoti iniziale e finale ha luogo anche ogniqualvolta @code{$0} @`e ricalcolato. @@ -7798,9 +7891,9 @@ Poich@'e lo spazio vuoto iniziale @`e stato ignorato quando si @`e trovato @code{$1}, esso non fa parte del nuovo @code{$0}. Alla fine, l'ultima istruzione @code{print} stampa il nuovo @code{$0}. -@cindex @code{FS}, contenente @code{^} -@cindex @code{^} (circonflesso), in @code{FS} -@cindex angolo buio, @code{^}, in @code{FS} +@cindex @code{FS} (variabile) @subentry contenente @code{^} +@cindex @code{^} (circonflesso) @subentry in @code{FS} +@cindex angolo buio @subentry @code{^}, in @code{FS} C'@`e un'ulteriore sottigliezza da considerare quando si usano le espressioni regolari per separare i campi. Non @`e ben specificato nello standard POSIX, n@'e altrove, cosa @@ -7811,7 +7904,7 @@ rispondono a questo quesito in modo diverso, e non si dovrebbe far affidamento su alcun comportamento specifico nei propri programmi. @value{DARKCORNER} -@cindex Brian Kernighan, @command{awk} di +@cindex Brian Kernighan @subentry @command{awk} di Di sicuro, BWK @command{awk} individua con @samp{^} solo l'inizio del record. Anche @command{gawk} funziona in questo modo. Per esempio: @@ -7829,11 +7922,11 @@ $ @kbd{echo 'xxAA xxBxx C' |} @node Campi di un solo carattere @subsection Fare di ogni carattere un campo separato -@cindex estensioni comuni, campi di un solo carattere -@cindex comuni, estensioni, campi di un solo carattere -@cindex differenze tra @command{awk} e @command{gawk}, campi di un solo carattere -@cindex singolo carattere, campi -@cindex campi di un solo carattere +@cindex estensioni comuni @subentry campi di un solo carattere +@cindex comuni @subentry estensioni @subentry campi di un solo carattere +@cindex differenze tra @command{awk} e @command{gawk} @subentry campi di un solo carattere +@cindex singolo carattere @subentry campi di un +@cindex campi @subentry di un solo carattere Ci sono casi in cui si abbia la necessit@`a di analizzare ciascun carattere di un record separatamente. Questo si pu@`o fare in @command{gawk} semplicemente assegnando la stringa nulla (@code{""}) a @code{FS}. @value{COMMONEXT} @@ -7852,8 +7945,8 @@ $ @kbd{echo a b | gawk 'BEGIN @{ FS = "" @}} @print{} Il campo 3 @`e b @end example -@cindex angolo buio, @code{FS} come stringa nulla -@cindex @code{FS}, variabile, come stringa nulla +@cindex angolo buio @subentry @code{FS} come stringa nulla +@cindex @code{FS} (variabile) @subentry come stringa nulla Tradizionalmente, il comportamento di @code{FS} quando @`e impostato a @code{""} non @`e stato definito. In questo caso, la maggior parte delle versioni UNIX di @command{awk} trattano l'intero record come se avesse un @@ -7866,10 +7959,11 @@ si comporta in questo modo. @node Separatori campo da riga di comando @subsection Impostare @code{FS} dalla riga di comando -@cindex @option{-F}, opzione sulla riga di comando -@cindex separatore di campo, specificare sulla riga di comando -@cindex riga di comando, impostare @code{FS} sulla -@cindex @code{FS}, variabile, impostare da riga di comando +@cindex @option{-F} (opzione) sulla riga di comando +@cindex opzione @subentry @option{-F} @subentry sulla riga di comando +@cindex separatore di campo @subentry specificare sulla riga di comando +@cindex riga di comando @subentry impostare @code{FS} sulla +@cindex @code{FS} (variabile) @subentry impostare da riga di comando @code{FS} pu@`o essere impostata sulla riga di comando. Per far questo si usa l'opzione @option{-F}. Per esempio: @@ -7896,9 +7990,9 @@ awk -F\\\\ '@dots{}' file @dots{} @end example @noindent -@cindex separatore di campo, @code{\} (barra inversa) come -@cindex @code{\} (barra inversa), come separatore di campo -@cindex barra inversa (@code{\}), come separatore di campo +@cindex separatore di campo @subentry @code{\} (barra inversa) come +@cindex @code{\} (barra inversa) @subentry come separatore di campo +@cindex barra inversa (@code{\}) @subentry come separatore di campo Poich@'e @samp{\} @`e usato nella shell per proteggere caratteri, a @command{awk} arriva @samp{-F\\}. Quindi @command{awk} elabora @samp{\\} per caratteri di protezione (@pxref{Sequenze di protezione}), producendo alla fine @@ -7951,7 +8045,7 @@ che ci si aspettava venisse usato. Questo lascia intuire il motivo per cui si deve stare attenti nella scelta dei separatori di campo e di record. -@cindex Unix @command{awk}, file di password, separatori di campo e +@cindex Unix @command{awk} @subentry file di password @subentry separatore di campo e Forse l'uso pi@`u comune di un solo carattere come separatore di campo avviene quando si elabora il file delle password di un sistema Unix. Su molti sistemi Unix, ogni utente @`e descritto da un elemento nel file delle password del @@ -7962,7 +8056,7 @@ dell'utente criptata o oscurata (una password oscurata @`e indicata dalla presenza di una sola @samp{x} nel secondo campo). Una riga nel file delle password potrebbe essere simile a questa: -@cindex Robbins, Arnold +@cindex Robbins @subentry Arnold @example arnold:x:2076:10:Arnold Robbins:/home/arnold:/bin/bash @end example @@ -7989,11 +8083,10 @@ awk -F'\n' '@var{programma}' @var{file @dots{}} @noindent In questo caso, @code{$1} coincide con @code{$0}. - @sidebar Cambiare @code{FS} non incide sui campi -@cindex POSIX @command{awk}, separatori di campo e -@cindex separatore di campo, POSIX e il +@cindex POSIX @command{awk} @subentry separatore di campo +@cindex separatore di campo @subentry POSIX e il Secondo lo standard POSIX, si suppone che @command{awk} si comporti come se ogni record sia stato diviso in campi nel momento in cui @`e stato letto. In particolare, ci@`o vuol dire che se si cambia il valore di @@ -8001,9 +8094,9 @@ letto. In particolare, ci@`o vuol dire che se si cambia il valore di la loro suddivisione) sar@`a ancora quello ottenuto usando il precedente valore di @code{FS}, non quello nuovo. -@cindex angolo buio, separatori di campo -@cindex @command{sed}, programma di utilit@`a -@cindex programma di utilit@`a @command{sed} +@cindex angolo buio @subentry separatore di campo +@cindex @command{sed} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{sed} @cindex editori di flusso Comunque, molte delle pi@`u vecchie implementazioni di @command{awk} non funzionano in questo modo. Invece, rimandano la divisione dei campi @@ -8102,9 +8195,9 @@ caso, @code{IGNORECASE} avr@`a effetto. @section Leggere campi di larghezza costante -@cindex campi di larghezza costante -@cindex larghezza costante, campi di -@cindex funzionalit@`a avanzate, campi di larghezza costante +@cindex campi @subentry di larghezza costante +@cindex larghezza costante @subentry campi di +@cindex funzionalit@`a @subentry avanzate @subentry campi di larghezza costante @c O'Reilly doesn't like it as a note the first thing in the section. @ifnotinfo Questa @@ -8151,12 +8244,12 @@ Sebbene un programma @command{awk} portabile possa usare una serie di chiamate @code{substr()} su @code{$0} (@pxref{Funzioni per stringhe}), questo @`e scomodo e inefficiente se il numero dei campi @`e elevato. -@cindex risoluzione di problemi, errori fatali, specificare larghezza dei campi -@cindex problemi, risoluzione di, errori fatali, specificare larghezza dei campi -@cindex @command{w}, programma di utilit@`a -@cindex programma di utilit@`a @command{w} -@cindex @code{FIELDWIDTHS}, variabile -@cindex @command{gawk}, variabile @code{FIELDWIDTHS} in +@cindex risoluzione di problemi @subentry errori fatali @subentry specificare larghezza dei campi +@cindex problemi @subentry risoluzione di @subentry errori fatali, specificare larghezza dei campi +@cindex @command{w} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{w} +@cindex @code{FIELDWIDTHS} (variabile) +@cindex @command{gawk} @subentry variabile @subentry @code{FIELDWIDTHS} in La suddivisione di un record in input in campi a larghezza fissa viene specificata assegnando una stringa contenente numeri separati da spazi alla variabile predefinita @code{FIELDWIDTHS}. Ogni numero specifica la larghezza @@ -8171,7 +8264,7 @@ Unix @command{w}. @`E utile per spiegare l'uso di @code{FIELDWIDTHS}: @example @group - 10:06pm up 21 days, 14:04, 23 users +10:06pm up 21 days, 14:04, 23 users User tty login@ idle JCPU PCPU what hzuo ttyV0 8:58pm 9 5 vi p24.tex hzang ttyV3 6:37pm 50 -csh @@ -8192,18 +8285,18 @@ calcolato: @example BEGIN @{ FIELDWIDTHS = "9 6 10 6 7 7 35" @} NR > 2 @{ - inat = $4 - sub(/^ +/, "", inat) # togli spazi prima del valore - if (inat == "") - inat = 0 - if (inat ~ /:/) @{ # hh:mm - split(inat, t, ":") - inat = t[1] * 60 + t[2] - @} - if (inat ~ /days/) - inat *= 24 * 60 * 60 +inat = $4 +sub(/^ +/, "", inat) # togli spazi prima del valore +if (inat == "") +inat = 0 +if (inat ~ /:/) @{ # hh:mm +split(inat, t, ":") +inat = t[1] * 60 + t[2] +@} +if (inat ~ /days/) +inat *= 24 * 60 * 60 - print $1, $2, inat +print $1, $2, inat @} @end example @@ -8338,11 +8431,11 @@ o @code{"FIELDWIDTHS"} se si usa la separazione in campi a larghezza fissa: @example if (PROCINFO["FS"] == "FS") - @var{separazione in campi normale}@dots{} +@var{separazione in campi normale}@dots{} else if (PROCINFO["FS"] == "FIELDWIDTHS") - @var{separazione in campi a larghezza fissa}@dots{} +@var{separazione in campi a larghezza fissa}@dots{} else - @var{separazione dei campi in base al contenuto}@dots{} @ii{(si veda +@var{separazione dei campi in base al contenuto}@dots{} @ii{(si veda @ifnotinfo la @value{SECTION} successiva)} @end ifnotinfo @@ -8371,7 +8464,7 @@ Questo di @command{gawk}. Se si @`e un utente alle prime armi di @command{awk}, la si pu@`o saltare in prima lettura. -@cindex funzionalit@`a avanzate, specificare il contenuto dei campi +@cindex funzionalit@`a @subentry avanzate @subentry specificare il contenuto dei campi Normalmente, quando si usa @code{FS}, @command{gawk} definisce i campi come le parti del record che si trovano tra due separatori di campo. In altre @@ -8399,8 +8492,8 @@ Robbins,Arnold,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA @c endfile @end example -@cindex @command{gawk}, variabile @code{FPAT} in -@cindex @code{FPAT}, variabile +@cindex @command{gawk} @subentry variabile @subentry @code{FPAT} in +@cindex @code{FPAT} (variabile) La variabile @code{FPAT} offre una soluzione per casi come questo. Il valore di @code{FPAT} dovrebbe essere una stringa formata da un'espressione regolare. L'espressione regolare descrive il contenuto di ciascun campo. @@ -8430,16 +8523,16 @@ e divide i dati: @c file eg/misc/simple-csv.awk @group BEGIN @{ - FPAT = "([^,]+)|(\"[^\"]+\")" +FPAT = "([^,]+)|(\"[^\"]+\")" @} @end group @group @{ - print "NF = ", NF - for (i = 1; i <= NF; i++) @{ - printf("$%d = <%s>\n", i, $i) - @} +print "NF = ", NF +for (i = 1; i <= NF; i++) @{ +printf("$%d = <%s>\n", i, $i) +@} @} @end group @c endfile @@ -8467,8 +8560,8 @@ questo tipo: @example if (substr($i, 1, 1) == "\"") @{ - len = length($i) - $i = substr($i, 2, len - 2) # Ottiene il testo tra doppi apici +len = length($i) +$i = substr($i, 2, len - 2) # Ottiene il testo tra doppi apici @} @end example @@ -8508,11 +8601,11 @@ per suddividere normali stringhe (@pxref{Funzioni per stringhe}). @node Controllare la creazione di campi @section Controllare come @command{gawk} sta dividendo i record -@cindex @command{gawk}, separazione in campi e +@cindex @command{gawk} @subentry separazione in campi e Come visto sopra, @command{gawk} fornisce tre metodi indipendenti per dividere i record in input in campi. Il meccanismo utilizzato dipende da -quale delle tre variabili---@code{FS}, @code{FIELDWIDTHS} o -@code{FPAT}---@`e stato definito per ultimo. +quale delle tre variabili --- @code{FS}, @code{FIELDWIDTHS} o +@code{FPAT} --- @`e stato definito per ultimo. Inoltre, un analizzatore di input che utilizzi l'API (Application Programming Interface) pu@`o scegliere di modificare il meccanismo di analisi dei record; si veda @ref{Analizzatori di input} per ulteriori informazioni @@ -8550,17 +8643,17 @@ record e poi ripristinare le inpostazioni originali. Si veda @node Righe multiple @section Record su righe multiple -@cindex righe multiple, record su -@cindex record multiriga -@cindex input, record multiriga -@cindex file, lettura dei record multiriga -@cindex input, file in, si veda file in input +@cindex righe multiple @subentry record su +@cindex record @subentry multiriga +@cindex input @subentry record multiriga +@cindex file @subentry lettura dei record multiriga +@cindex input In alcune banche-dati, una sola riga non pu@`o contenere in modo adeguato tutte le informazioni di una voce. In questi casi si possono usare record multiriga. Il primo passo @`e quello di scegliere il formato dei dati. -@cindex separatori di record, per record multiriga +@cindex separatore di record @subentry per record multiriga Una tecnica @`e quella di usare un carattere o una stringa non usuali per separare i record. Per esempio, si pu@`o usare il carattere di interruzione di pagina (scritto @samp{\f} sia in @command{awk} che in C) per separarli, @@ -8569,7 +8662,7 @@ variabile @code{RS} a @code{"\f"} (una stringa contenente il carattere di interruzione di pagina). Si potrebbe ugualmente usare qualsiasi altro carattere, sempre che non faccia parte dei dati di un record. -@cindex @code{RS}, variabile, record multiriga e +@cindex @code{RS} (variabile) @subentry record multiriga e Un'altra tecnica @`e quella di usare righe vuote per separare i record. Per una particolare convenzione, una stringa nulla come valore di @code{RS} indica che i record @@ -8581,8 +8674,8 @@ esse costituiscono sempre un unico separatore di record. (Le righe vuote devono essere completamente vuote; righe che contengono spazi bianchi @emph{non} sono righe vuote.) -@cindex stringa pi@`u lunga da sinistra, individuare la -@cindex individuare la stringa pi@`u lunga da sinistra +@cindex stringa @subentry pi@`u lunga da sinistra @subentry individuare la +@cindex individuare @subentry la stringa pi@`u lunga da sinistra Si pu@`o ottenere lo stesso effetto di @samp{RS = ""} assegnando la stringa @code{"\n\n+"} a @code{RS}. Quest'espressione regolare individua il ritorno a capo alla fine del record e una o pi@`u righe vuote dopo il @@ -8593,7 +8686,7 @@ Quindi, il record successivo non inizia prima della successiva riga non vuota; indipendentemente dal numero di righe vuote presenti in una voce di banca-dati, esse sono considerate come un unico separatore di record. -@cindex angolo buio, record multiriga +@cindex angolo buio @subentry record multiriga Comunque, c'@`e una sostanziale differenza tra @samp{RS = ""} e @samp{RS = "\n\n+"}. Nel primo caso, i ritorni a capo iniziali nel @value{DF} di input vengono ignorati, e se un file termina senza righe vuote aggiuntive dopo @@ -8601,8 +8694,8 @@ l'ultimo record, il ritorno a capo viene rimosso dal record. Nel secondo caso, questa particolare elaborazione non viene fatta. @value{DARKCORNER} -@cindex separatore di campo, nei record multiriga -@cindex @code{FS}, nei record multiriga +@cindex separatore di campo @subentry nei record multiriga +@cindex @code{FS} (variabile) @subentry nei record multiriga Ora che l'input @`e separato in record, il secondo passo @`e quello di separare i campi all'interno dei record. Un modo per farlo @`e quello di dividere in campi ognuna delle righe in input @@ -8675,10 +8768,10 @@ Un semplice programma per elaborare questo file @`e il seguente: BEGIN @{ RS = "" ; FS = "\n" @} @{ - print "Il nome @`e:", $1 - print "L'indirizzo @`e:", $2 - print "Citt@`a e Stato sono:", $3 - print "" +print "Il nome @`e:", $1 +print "L'indirizzo @`e:", $2 +print "Citt@`a e Stato sono:", $3 +print "" @} @end example @@ -8734,9 +8827,9 @@ I record sono separati da ricorrenze di caratteri corrispondenti a standard POSIX.) @end table -@cindex @command{gawk}, @code{RT} variabile in -@cindex @code{RT}, variabile -@cindex differenze tra @command{awk} e @command{gawk}, variabili @code{RS}/@code{RT} +@cindex @command{gawk} @subentry variabile @subentry @code{RT} in +@cindex @code{RT} (variabile) +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabili @code{RS}/@code{RT} Se non @`e eseguito in modalit@`a di compatibilit@`a (@pxref{Opzioni}), @command{gawk} imposta @code{RT} al testo di input corrispondente al valore specificato da @code{RS}. @@ -8746,8 +8839,8 @@ corrisponde a @code{RS}, @command{gawk} imposta @code{RT} alla stringa nulla. @node Getline @section Richiedere input usando @code{getline} -@cindex @code{getline}, comando, input esplicito con -@cindex input esplicito +@cindex @code{getline} (comando) @subentry input esplicito con +@cindex input @subentry esplicito Finora abbiamo ottenuto i dati di input dal flusso di input principale di @command{awk}: lo standard input (normalmente la tastiera, a volte l'output di un altro programma) o i @@ -8774,11 +8867,12 @@ delle Parti I e II @end ifnotinfo e avere acquisito una buona conoscenza di come funziona @command{awk}. -@cindex @command{gawk}, variabile @code{ERRNO} in -@cindex @code{ERRNO}, variabile, con comando @command{getline} -@cindex differenze tra @command{awk} e @command{gawk}, comando @code{getline} -@cindex @code{getline}, comando, codice di ritorno -@cindex @option{--sandbox}, opzione, ridirezione dell'input con @code{getline} +@cindex @command{gawk} @subentry variabile @subentry @code{ERRNO} in +@cindex @code{ERRNO} (variabile) @subentry con comando @command{getline} +@cindex differenze tra @command{awk} e @command{gawk} @subentry comando @code{getline} +@cindex @code{getline} (comando) @subentry codice di ritorno +@cindex @option{--sandbox} (opzione) @subentry ridirezione dell'input con @code{getline} +@cindex opzione @subentry @option{--sandbox} @subentry ridirezione dell'input con @code{getline} Il comando @code{getline} restituisce 1 se trova un record e 0 se trova la fine del file. Se si verifica qualche errore cercando di leggere @@ -8901,8 +8995,8 @@ regola presente nel programma. @xref{Istruzione next}. @node Getline variabile @subsection Usare @code{getline} in una variabile -@cindex @code{getline} in una variabile -@cindex variabili, usare in comando @code{getline} +@cindex @code{getline} (comando) @subentry in una variabile +@cindex variabili @subentry usare in comando @code{getline} Si pu@`o usare @samp{getline @var{var}} per leggere il record successivo in input ad @command{awk} nella variabile @var{var}. Non vien fatta @@ -8955,12 +9049,12 @@ il valore di @code{NF} non cambiano. @node Getline file @subsection Usare @code{getline} da un file -@cindex @code{getline} da un file -@cindex input, ridirezione dell' +@cindex @code{getline} (comando) @subentry da un file +@cindex input @subentry ridirezione dell' @cindex ridirezione dell'input -@cindex @code{<} (parentesi acuta sinistra), operatore @code{<} (I/O) -@cindex parentesi acuta sinistra (@code{<}), operatore @code{<} (I/O) -@cindex operatori di input/output +@cindex @code{<} (parentesi acuta sinistra) @subentry operatore @code{<} (I/O) +@cindex parentesi @subentry acuta sinistra (@code{<}) @subentry operatore @code{<} (I/O) +@cindex operatori @subentry input/output Si usa @samp{getline < @var{file}} per leggere il record successivo da @var{file}. Qui, @var{file} @`e un'espressione di tipo stringa che specifica il @value{FN}. @samp{< @var{file}} @`e una cosidetta @@ -8972,11 +9066,11 @@ corrente: @example @{ - if ($1 == 10) @{ - getline < "secondary.input" - print - @} else - print +if ($1 == 10) @{ + getline < "secondary.input" + print +@} else + print @} @end example @@ -8986,7 +9080,7 @@ modo normale, per cui vengono cambiati i valori di @code{$0} e degli altri campi, producendo un nuovo valore di @code{NF}. Viene impostato anche @code{RT}. -@cindex POSIX @command{awk}, operatore @code{<} e +@cindex POSIX @command{awk} @subentry @code{<} (operatore) @c Thanks to Paul Eggert for initial wording here Per lo standard POSIX, @samp{getline < @var{espressione}} @`e ambiguo se @var{espressione} contiene operatori che non sono all'interno di parentesi, @@ -8998,7 +9092,7 @@ programma dev'essere portabile su tutte le implementazioni di @command{awk}. @node Getline variabile file @subsection Usare @code{getline} in una variabile da un file -@cindex variabili, usare in comando @code{getline} +@cindex variabili @subentry usare in comando @code{getline} Si usa @samp{getline @var{var} < @var{file}} per leggere l'input dal file @@ -9017,12 +9111,12 @@ Tale record @`e sostituito dal contenuto del file @example @{ - if (NF == 2 && $1 == "@@include") @{ - while ((getline line < $2) > 0) - print line - close($2) - @} else - print +if (NF == 2 && $1 == "@@include") @{ + while ((getline line < $2) > 0) + print line + close($2) +@} else + print @} @end example @@ -9053,11 +9147,11 @@ Se non si pu@`o ottenerla, l'attenzione ai dettagli pu@`o aiutare.} @author Brian Kernighan @end quotation -@cindex @code{|} (barra verticale), operatore @code{|} (I/O) -@cindex barra verticale (@code{|}), operatore @code{|} (I/O) -@cindex input, @dfn{pipeline} -@cindex @dfn{pipe}, input -@cindex operatori, input/output +@cindex @code{|} (barra verticale) @subentry operatore @code{|} (I/O) +@cindex barra verticale (@code{|}) @subentry operatore @code{|} (I/O) +@cindex input @subentry @dfn{pipeline} +@cindex @dfn{pipe} @subentry input +@cindex operatori @subentry input/output L'output di un comando pu@`o anche essere convogliato in @code{getline}, usando @samp{@var{comando} | getline}. In questo caso, la stringa @var{comando} viene eseguita come comando di shell e @@ -9071,13 +9165,13 @@ costituito da un comando di shell. @example @group @{ - if ($1 == "@@execute") @{ - tmp = substr($0, 10) # Rimuove "@@execute" - while ((tmp | getline) > 0) - print - close(tmp) - @} else - print +if ($1 == "@@execute") @{ + tmp = substr($0, 10) # Rimuove "@@execute" + while ((tmp | getline) > 0) + print + close(tmp) +@} else + print @} @end group @end example @@ -9105,9 +9199,9 @@ gastone @noindent il programma potrebbe produrre: -@cindex Robbins, Bill -@cindex Robbins, Miriam -@cindex Robbins, Arnold +@cindex Robbins @subentry Bill +@cindex Robbins @subentry Miriam +@cindex Robbins @subentry Arnold @example pippo pluto @@ -9128,7 +9222,7 @@ di @code{NF}, e ricalcola il valore di @code{$0}. I valori di @code{NR} e @code{FNR} non vengono cambiati. Viene impostato @code{RT}. -@cindex POSIX @command{awk}, operatore I/O @code{|} e +@cindex POSIX @command{awk} @subentry @code{|} (operatore I/O) @c Thanks to Paul Eggert for initial wording here Per lo standard POSIX, @samp{@var{espressione} | getline} @`e ambiguo se @var{espressione} contiene operatori che non sono all'interno di parentesi, @@ -9138,9 +9232,9 @@ l'operatore di concatenazione non @`e tra parentesi. Si dovrebbe scrivere invece @samp{(@w{"echo "} "date") | getline}, se il programma dev'essere portabile su tutte le implementazioni di @command{awk}. -@cindex Brian Kernighan, @command{awk} di -@cindex @command{mawk}, programma di utilit@`a -@cindex programma di utilit@`a @command{mawk} +@cindex Brian Kernighan @subentry @command{awk} di +@cindex @command{mawk} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{mawk} @quotation NOTA Sfortunatamente, @command{gawk} non ha un comportamento uniforme nel trattare un costrutto come @samp{@w{"echo "} "date" | getline}. @@ -9156,7 +9250,7 @@ esplicite. @node Getline variabile @dfn{pipe} @subsection Usare @code{getline} in una variabile da una @dfn{pipe} -@cindex variabili, usare in comando @code{getline} +@cindex variabili @subentry usare in comando @code{getline} Quando si usa @samp{@var{comando} | getline @var{var}}, l'output di @var{comando} @`e inviato tramite una @dfn{pipe} a @@ -9167,9 +9261,9 @@ stampa: @example BEGIN @{ - "date" | getline current_time - close("date") - print "Report printed on " current_time +"date" | getline current_time +close("date") +print "Report printed on " current_time @} @end example @@ -9190,12 +9284,12 @@ programma dev'essere portabile su tutte le implementazioni di @command{awk}. @node Getline coprocesso @subsection Usare @code{getline} da un coprocesso -@cindex coprocessi, @code{getline} da -@cindex @code{getline}, comando, coprocessi@comma{} usare dal -@cindex @code{|} (barra verticale), operatore @code{|&} (I/O) -@cindex barra verticale (@code{|}), operatore @code{|&} (I/O) -@cindex operatori, input/output -@cindex differenze tra @command{awk} e @command{gawk}, operatori di input/output +@cindex coprocessi @subentry @code{getline} da +@cindex @code{getline} (comando) @subentry coprocessi, usare da +@cindex @code{|} (barra verticale) @subentry operatore @code{|&} (I/O) +@cindex barra verticale (@code{|}) @subentry operatore @code{|&} (I/O) +@cindex operatori @subentry input/output +@cindex differenze tra @command{awk} e @command{gawk} @subentry operatori di input/output Leggere dell'input in @code{getline} da una @dfn{pipe} @`e un'operazione unidirezionale. @@ -9238,7 +9332,7 @@ dove i coprocessi vengono trattati pi@`u dettagliatamente. @node Getline variabile coprocesso @subsection Usare @code{getline} in una variabile da un coprocesso -@cindex variabili, usare in comando @code{getline} +@cindex variabili @subentry usare in comando @code{getline} Quando si usa @samp{@var{comando} |& getline @var{var}}, l'output dal coprocesso @var{comando} viene inviato tramite una @dfn{pipe} bidirezionale a @@ -9268,10 +9362,10 @@ Quando @code{getline} cambia il valore di @code{$0} e @code{NF}, programma per iniziare a provare il nuovo record su ogni criterio di ricerca. Comunque, il nuovo record viene provato su ogni regola successiva. -@cindex differenze tra @command{awk} e @command{gawk}, limitazioni di implementazione -@cindex implementazione, problemi, @command{gawk}, limiti -@cindex @command{awk}, implementazioni, limiti -@cindex @command{gawk}, problemi di implementazioni, limiti +@cindex differenze tra @command{awk} e @command{gawk} @subentry limitazioni di implementazione +@cindex implementazione @subentry problemi di @subentry @command{gawk}, limiti +@cindex @command{awk} @subentry implementazioni di @subentry limiti delle +@cindex @command{gawk} @subentry problemi di implementazione @subentry limiti @item Alcune tra le prime implementazioni di @command{awk} limitano a una sola il numero di @dfn{pipeline} che un programma @command{awk} pu@`o tenere aperte. @@ -9279,11 +9373,11 @@ In @command{gawk}, non c'@`e questo limite. Si possono aprire tante @dfn{pipeline} (e coprocessi) quante ne permette il sistema operativo in uso. -@cindex effetti collaterali, variabile @code{FILENAME} -@cindex @code{FILENAME}, variabile, impostare con @code{getline} -@cindex angolo buio, variabile @code{FILENAME} -@cindex @code{getline}, comando, variabile @code{FILENAME} e -@cindex @code{BEGIN}, criterio di ricerca, @code{getline} e +@cindex effetti collaterali @subentry variabile @code{FILENAME} +@cindex @code{FILENAME} (variabile) @subentry impostare con @code{getline} +@cindex angolo buio @subentry variabile @subentry @code{FILENAME} +@cindex @code{getline} (comando) @subentry variabile @code{FILENAME} e +@cindex @code{BEGIN} (regola) @subentry @code{getline} e @item Un interessante effetto collaterale si ha se si usa @code{getline}, senza una ridirezione, all'interno di una regola @code{BEGIN}. Poich@'e una @@ -9335,9 +9429,9 @@ From: Duncan Moore <duncan.moore@@gmx.com> @example BEGIN @{ - system("echo 1 > f") - while ((getline a[++c] < "f") > 0) @{ @} - print c +system("echo 1 > f") +while ((getline a[++c] < "f") > 0) @{ @} +print c @} @end example @@ -9353,7 +9447,7 @@ se c'@`e un valore di stringa da assegnare. @node Sommario di getline @subsection Sommario delle varianti di @code{getline} -@cindex @code{getline}, comando, varianti +@cindex @code{getline} (comando) @subentry varianti La @ref{tabella-varianti-getline} riassume le otto varianti di @code{getline}, @@ -9379,10 +9473,10 @@ Nota: per ogni variante, @command{gawk} imposta la variabile predefinita @node Timeout in lettura @section Leggere input entro un tempo limite -@cindex tempo limite, leggere input -@cindex @dfn{timeout}, si veda tempo limite +@cindex tempo limite @subentry entro il quale leggere input +@cindex @dfn{timeout} @seeentry{tempo limite} -@cindex differenze tra @command{awk} e @command{gawk}, tempo limite per lettura +@cindex differenze tra @command{awk} e @command{gawk} @subentry tempo limite per lettura @ifnotinfo Questa @end ifnotinfo @@ -9412,9 +9506,9 @@ non riceve alcuna risposta dal server dopo un certo periodo di tempo: Service = "/inet/tcp/0/localhost/daytime" PROCINFO[Service, "READ_TIMEOUT"] = 100 if ((Service |& getline) > 0) - print $0 +print $0 else if (ERRNO != "") - print ERRNO +print ERRNO @end group @end example @@ -9425,7 +9519,7 @@ non pi@`u di cinque secondi: @example PROCINFO["/dev/stdin", "READ_TIMEOUT"] = 5000 while ((getline < "/dev/stdin") > 0) - print $0 +print $0 @end example @command{gawk} termina l'operazione di lettura se l'input non @@ -9463,8 +9557,8 @@ per l'input diventa illimitata. @example PROCINFO[Service, "READ_TIMEOUT"] = 1000 while ((Service |& getline) > 0) @{ - print $0 - PROCINFO[Service, "READ_TIMEOUT"] -= 100 +print $0 +PROCINFO[Service, "READ_TIMEOUT"] -= 100 @} @end example @@ -9476,6 +9570,8 @@ la prima volta. Per questo, cambiare il valore del tempo limite come nell'esempio appena visto non @`e molto utile. @end quotation +@cindex @env{GAWK_READ_TIMEOUT} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{GAWK_READ_TIMEOUT} Se l'elemento di @code{PROCINFO} non @`e presente e la variabile d'ambiente @env{GAWK_READ_TIMEOUT} esiste, @command{gawk} usa il suo valore per inizializzare il valore di tempo limite. @@ -9502,9 +9598,9 @@ indefinitamente in attesa che qualche altro processo lo apra in scrittura. @node Proseguire dopo errore in input @section Elaborare ulteriore input dopo certi errori di I/O @cindex proseguire dopo errore in input -@cindex errore in input, possibilit@`a di proseguire +@cindex errore @subentry in input @subentry possibilit@`a di proseguire -@cindex differenze tra @command{awk} e @command{gawk}, proseguire dopo errore in input +@cindex differenze tra @command{awk} e @command{gawk} @subentry proseguire dopo errore in input @ifnotinfo Questa @end ifnotinfo @@ -9543,9 +9639,9 @@ modo non bloccante. @node Directory su riga di comando @section Directory sulla riga di comando -@cindex differenze tra @command{awk} e @command{gawk}, directory sulla riga di comando -@cindex directory, riga di comando -@cindex riga di comando, directory su +@cindex differenze tra @command{awk} e @command{gawk} @subentry directory sulla riga di comando +@cindex directory @subentry riga di comando +@cindex riga di comando @subentry directory su Per lo standard POSIX, i file che compaiono sulla riga di comando di @command{awk} devono essere file di testo; @`e un errore fatale se non lo sono. @@ -9640,6 +9736,8 @@ o da un coprocesso. @code{PROCINFO[@var{file}, "READ_TIMEOUT"]} si pu@`o usare per impostare un tempo limite alle operazioni di lettura da @var{file}. +@cindex POSIX @subentry modalit@`a +@cindex modalit@`a POSIX @item Le directory sulla riga di comando generano un errore fatale per @command{awk} standard; @@ -9666,7 +9764,7 @@ comprese le astensioni, per ciascun quesito. @chapter Stampare in output @cindex stampare -@cindex output, stampare, si veda stampare +@cindex output @subentry stampare @seeentry{stampare} Una delle azioni che un programma fa pi@`u comunemente, @`e quella di produrre @dfn{stampe}, ossia scrivere in output l'input letto, tutto o in parte. Si pu@`o usare l'istruzione @code{print} per una stampa semplice, e l'istruzione @@ -9681,8 +9779,8 @@ Per stampare fornendo delle specifiche, @`e necessario usare l'istruzione @code{printf} (@pxref{Printf}). -@cindex istruzione @code{print} -@cindex istruzione @code{printf} +@cindex istruzione @subentry @code{print} +@cindex istruzione @subentry @code{printf} Oltre alla stampa semplice e formattata, questo @value{CHAPTER} esamina anche le ridirezioni di I/O verso file e @dfn{pipe}, introduce i @value{FNS} speciali che @command{gawk} elabora internamente, @@ -9738,9 +9836,9 @@ del record corrente (come @code{$1}), variabili, o quasiasi espressione @command{awk}. I valori numerici sono convertiti in stringhe prima di essere stampati. -@cindex record, stampare -@cindex righe, vuote, stampare -@cindex testo, stampare +@cindex record @subentry stampare +@cindex righe @subentry vuote @subentry stampare +@cindex testo @subentry stampare Una semplice istruzione @samp{print} senza specificare elementi equivale a @samp{print $0}: stampa l'intero record corrente. Per stampare una riga vuota, si usa @samp{print ""}. @@ -9764,7 +9862,7 @@ resto della stringa. Una singola istruzione @code{print} pu@`o in questo modo generare un numero qualsiasi di righe. -@cindex ritorno a capo, stampare un +@cindex ritorno a capo @subentry stampare un Quel che segue @`e un esempio di stampa di una stringa che contiene al suo interno dei @ifinfo @@ -9792,7 +9890,7 @@ $ @kbd{awk 'BEGIN @{ print "riga uno\nriga due\nriga tre" @}'} @end group @end example -@cindex campi, stampare +@cindex campi @subentry stampare Il prossimo esempio, eseguito sul file @file{inventory-shipped}, stampa i primi due campi di ogni record in input, separandoli con uno spazio: @@ -9805,8 +9903,8 @@ $ @kbd{awk '@{ print $1, $2 @}' inventory-shipped} @dots{} @end example -@cindex istruzione @code{print}, virgole, omettere -@cindex debug, istruzione @code{print}@comma{} omissione virgole +@cindex istruzione @subentry @code{print} @subentry virgole, omettere +@cindex debug @subentry istruzione @code{print} @subentry omissione virgole Un errore frequente usando l'istruzione @code{print} @`e quello di tralasciare la virgola tra due elementi. Questo ha spesso come risultato la stampa di elementi attaccati tra loro, senza lo spazio di separazione. Il motivo per @@ -9823,7 +9921,7 @@ $ @kbd{awk '@{ print $1 $2 @}' inventory-shipped} @dots{} @end example -@cindex @code{BEGIN}, criterio di ricerca, intestazioni, aggiungere +@cindex @code{BEGIN} (regola) @subentry intestazioni, aggiungere Per chi non conosce il file @file{inventory-shipped} nessuno dei due output di esempio risulta molto comprensibile. Una riga iniziale di intestazione li renderebbe pi@`u chiari. @@ -9834,8 +9932,8 @@ stampate una volta sola: @example awk 'BEGIN @{ print "Mese Contenitori" - print "----- -----------" @} - @{ print $1, $2 @}' inventory-shipped + print "----- -----------" @} + @{ print $1, $2 @}' inventory-shipped @end example @noindent @@ -9858,13 +9956,13 @@ campi: @example @group awk 'BEGIN @{ print "Mese Contenitori" - print "----- -----------" @} - @{ print $1, " ", $2 @}' inventory-shipped + print "----- -----------" @} + @{ print $1, " ", $2 @}' inventory-shipped @end group @end example -@cindex istruzione @code{printf}, colonne@comma{} allineamento -@cindex colonne, allineamento +@cindex istruzione @subentry @code{printf} @subentry colonne, allineamento +@cindex colonne @subentry allineamento Allineare le colonne in questo modo pu@`o diventare piuttosto complicato, quando ci sono parecchie colonne da tenere allineate. Contare gli spazi per due o tre colonne @`e semplice, ma oltre questo limite comincia a @@ -9872,9 +9970,9 @@ volerci molto tempo. Ecco perch@'e @`e disponibile l'istruzione @code{printf} (@pxref{Printf}); una delle possibilit@`a che offre @`e quella di allineare colonne di dati. -@cindex continuazione di riga, in istruzione @code{print} -@cindex istruzione @code{print}, continuazione di riga e -@cindex @code{print}, istruzione, continuazione di riga e +@cindex continuazione di riga @subentry in istruzione @code{print} +@cindex istruzione @subentry @code{print} @subentry continuazione di riga e +@cindex @code{print} (istruzione) @subentry continuazione di riga e @quotation NOTA Si pu@`o continuare su pi@`u righe sia l'istruzione @code{print} che l'istruzione @code{printf} semplicemente mettendo un ritorno a capo dopo una virgola @@ -9885,7 +9983,7 @@ qualsiasi @node Separatori di output @section I separatori di output e come modificarli -@cindex variabile @code{OFS} +@cindex variabile @subentry @code{OFS} Come detto sopra, un'istruzione @code{print} contiene una lista di elementi separati da virgole. Nell'output, gli elementi sono solitamente separati da spazi singoli. Non @`e detto tuttavia che debba sempre essere cos@`{@dotless{i}}; uno @@ -9902,10 +10000,10 @@ ci aggiunge una stringa detta @dfn{separatore record in output} (o (cio@`e, un carattere di ritorno a capo). Quindi, ogni istruzione @code{print} normalmente genera [almeno] una riga a s@'e stante. -@cindex output, record -@cindex separatore di record in output, si veda @code{ORS}, variabile -@cindex @code{ORS}, variabile -@cindex @code{BEGIN}, criterio di ricerca, variabili @code{OFS}/@code{ORS}, assegnare valori a +@cindex output @subentry record +@cindex separatore di record @subentry in output @seeentry{@code{ORS} (variabile)} +@cindex @code{ORS} (variabile) +@cindex @code{BEGIN} (regola) @subentry variabili @code{OFS}/@code{ORS}, assegnare valori a Per cambiare il tipo di separazione in output di campi e record, si impostano valori differenti alle variabili @code{OFS} e @code{ORS}. Il posto pi@`u indicato per farlo @`e nella regola @code{BEGIN} @@ -9951,8 +10049,8 @@ programma viene scritto tutto su un'unica riga. @node OFMT @section Controllare l'output di numeri con @code{print} -@cindex numerico, formato di output -@cindex formati numerici di output +@cindex numerico @subentry formato di output +@cindex formato @subentry numerico di output Quando si stampano valori numerici con l'istruzione @code{print}, @command{awk} converte internamente ogni numero in una stringa di caratteri e stampa quella stringa. @command{awk} usa la funzione @code{sprintf()} @@ -9972,8 +10070,8 @@ in @ref{Lettere di controllo}. @cindexawkfunc{sprintf} -@cindex @code{OFMT}, variabile -@cindex output, specificatore di formato@comma{} @code{OFMT} +@cindex @code{OFMT} (variabile) +@cindex output @subentry specificatore di formato @subentry @code{OFMT} La variabile predefinita @code{OFMT} contiene la specifica di formato che @code{print} usa con @code{sprintf()} per convertire un numero in una stringa per poterla stampare. @@ -9990,9 +10088,9 @@ $ @kbd{awk 'BEGIN @{} @end example @noindent -@cindex angolo buio, variabile @code{OFMT} -@cindex POSIX @command{awk}, variabile @code{OFMT} e -@cindex variabile @code{OFMT}, POSIX @command{awk} e +@cindex angolo buio @subentry variabile @subentry @code{OFMT} +@cindex POSIX @command{awk} @subentry @code{OFMT} (variabile) +@cindex variabile @subentry @code{OFMT} @subentry POSIX @command{awk} in Per lo standard POSIX, il comportamento di @command{awk} @`e indefinito se @code{OFMT} contiene qualcosa di diverso da una specifica di conversione di un numero in virgola mobile. @@ -10001,10 +10099,10 @@ di un numero in virgola mobile. @node Printf @section Usare l'istruzione @code{printf} per stampe sofisticate -@cindex istruzione @code{printf} -@cindex @code{printf}, istruzione -@cindex output, formattato -@cindex formattare l'output +@cindex istruzione @subentry @code{printf} +@cindex @code{printf} (istruzione) +@cindex output @subentry formattare +@cindex formattare @subentry output Per un controllo pi@`u ampio sul formato di output di quello fornito da @code{print}, si pu@`o usare @code{printf}. Con @code{printf} si pu@`o @@ -10024,8 +10122,8 @@ cifre stampare dopo il separatore decimale). @node Printf Fondamenti @subsection Sintassi dell'istruzione @code{printf} -@cindex istruzione @code{printf}, sintassi dell' -@cindex @code{printf}, sintassi dell'istruzione +@cindex istruzione @subentry @code{printf} @subentry sintassi +@cindex @code{printf} (istruzione) @subentry sintassi Una semplice istruzione @code{printf} @`e qualcosa di simile a questo: @example @@ -10079,9 +10177,9 @@ in output. @node Lettere di controllo @subsection Lettere di controllo del formato -@cindex istruzione @code{printf}, lettere di controllo del formato -@cindex @code{printf}, istruzione, lettere di controllo del formato -@cindex specificatori di formato, istruzione @code{printf} +@cindex istruzione @subentry @code{printf} @subentry lettere di controllo del formato +@cindex @code{printf} (istruzione) @subentry lettere di controllo del formato +@cindex specificatori di formato @subentry istruzione @code{printf} Uno specificatore di formato inizia col carattere @samp{%} e termina con una @dfn{lettera di controllo del formato}; e dice all'istruzione @@ -10122,8 +10220,8 @@ Stampa un numero come un carattere; quindi, @samp{printf "%c", 65} stampa la lettera @samp{A}. L'output per un valore costituito da una stringa @`e il primo carattere della stringa stessa. -@cindex angolo buio, caratteri di controllo del formato -@cindex @command{gawk}, caratteri di controllo del formato +@cindex angolo buio @subentry caratteri di controllo del formato +@cindex @command{gawk} @subentry caratteri di controllo del formato @quotation NOTA Lo standard POSIX richiede che il primo carattere di una stringa sia stampato. In localizzazioni con caratteri multibyte, @command{gawk} tenta di @@ -10226,8 +10324,8 @@ Questa notazione non serve per stampare alcun argomento e ignora eventuali modificatori. @end table -@cindex angolo buio, caratteri di controllo del formato -@cindex @command{gawk}, caratteri di controllo del formato +@cindex angolo buio @subentry caratteri di controllo del formato +@cindex @command{gawk} @subentry caratteri di controllo del formato @quotation NOTA Quando si usano lettere di controllo del formato per numeri interi per stampare valori esterni all'intervallo massimo disponibile nel @@ -10255,9 +10353,9 @@ si prega di fare riferimento a quel testo. @node Modificatori di formato @subsection Modificatori per specifiche di formato @code{printf} -@cindex istruzione @code{printf}, modificatori -@cindex @code{printf}, istruzione, modificatori -@cindex modificatori@comma{} in specificatori di formato +@cindex istruzione @subentry @code{printf} @subentry modificatori +@cindex @code{printf} (istruzione) @subentry modificatori +@cindex modificatori @subentry in specificatori di formato Una specifica di formato pu@`o anche includere dei @dfn{modificatori} che possono controllare che parte stampare del valore dell'elemento, e anche quanto spazio utilizzare per stamparlo. @@ -10269,18 +10367,18 @@ spazi nell'output. Questi sono i modificatori previsti, nell'ordine in cui possono apparire: @table @asis -@cindex differenze tra @command{awk} e @command{gawk}, tra istruzioni @code{print} e @code{printf} -@cindex istruzione @code{printf}, specificatori posizionali -@cindex @code{printf}, istruzione, specificatori posizionali +@cindex differenze tra @command{awk} e @command{gawk} @subentry tra istruzioni @code{print} e @code{printf} +@cindex istruzione @subentry @code{printf} @subentry specificatori di posizione +@cindex @code{printf} (istruzione) @subentry specificatori di posizione @c the code{} does NOT start a secondary -@cindex specificatori posizionali, istruzione @code{printf} +@cindex specificatori di posizione @subentry istruzione @code{printf} @item @code{@var{N}$} -Una costante intera seguita da un @samp{$} @`e uno @dfn{specificatore posizionale}. +Una costante intera seguita da un @samp{$} @`e uno @dfn{specificatore di posizione}. Normalmente, le specifiche di formato sono applicate agli argomenti nell'ordine in cui appaiono nella stringa di formato. Con uno specificatore -posizionale, la specifica di formato @`e applicata a un argomento +di posizione, la specifica di formato @`e applicata a un argomento indicato per numero, invece che a quello che -sarebbe il prossimo argomento nella lista. Gli specificatori posizionali +sarebbe il prossimo argomento nella lista. Gli specificatori di posizione iniziano a contare partendo da uno. Quindi: @example @@ -10295,7 +10393,7 @@ A prima vista, questa funzionalit@`a non sembra di grande utilit@`a. Si tratta in effetti di un'estensione @command{gawk}, pensata per essere usata nella traduzione di messaggi emessi in fase di esecuzione. @xref{Ordinamento di printf}, -che descrive come e perch@'e usare specificatori posizionali. +che descrive come e perch@'e usare specificatori di posizione. Per ora li possiamo ignorare. @item - @code{-} (Segno meno) @@ -10465,9 +10563,9 @@ printf "%" w "." p "s\n", s @noindent Questo codice non @`e di facile lettura, ma funziona. -@c @cindex controlli @command @{lint} -@cindex debug, errori fatali, @code{printf}, stringhe di formato -@cindex POSIX @command{awk}, stringhe di formato @code{printf} e +@c @cindex lint checks +@cindex debug @subentry errori fatali @subentry @code{printf}, stringhe di formato +@cindex POSIX @command{awk} @subentry stringhe di formato @code{printf} Chi programma in C probabilmente @`e abituato a specificare modificatori addizionali (@samp{h}, @samp{j}, @samp{l}, @samp{L}, @samp{t} e @samp{z}) nelle stringhe di formato di @code{printf}. Questi modificatori non sono validi @@ -10528,8 +10626,8 @@ programma @command{awk}: @example awk 'BEGIN @{ print "Nome Numero" - print "---- ------" @} - @{ printf "%-10s %s\n", $1, $2 @}' mail-list + print "---- ------" @} + @{ printf "%-10s %s\n", $1, $2 @}' mail-list @end example L'esempio precedente usa sia l'istruzione @code{print} che l'istruzione @@ -10538,8 +10636,8 @@ risultati usando solo istruzioni @code{printf}: @example awk 'BEGIN @{ printf "%-10s %s\n", "Nome", "Numero" - printf "%-10s %s\n", "----", "------" @} - @{ printf "%-10s %s\n", $1, $2 @}' mail-list + printf "%-10s %s\n", "----", "------" @} + @{ printf "%-10s %s\n", $1, $2 @}' mail-list @end example @noindent @@ -10552,18 +10650,19 @@ evidenziare memorizzandola in una variabile, cos@`{@dotless{i}}: @example awk 'BEGIN @{ format = "%-10s %s\n" - printf format, "Nome", "Numero" - printf format, "----", "------" @} - @{ printf format, $1, $2 @}' mail-list + printf format, "Nome", "Numero" + printf format, "----", "------" @} + @{ printf format, $1, $2 @}' mail-list @end example @node Ridirezione @section Ridirigere l'output di @code{print} e @code{printf} -@cindex output, ridirezione +@cindex output @subentry ridirezione @cindex ridirezione dell'output -@cindex @option{--sandbox}, opzione, ridirezione dell'output con @code{print}, @code{printf} +@cindex @option{--sandbox} (opzione) @subentry ridirezione dell'output con @code{print}, @code{printf} +@cindex opzione @subentry @option{--sandbox} @subentry ridirezione dell'output con @code{print}, @code{printf} Finora, l'output di @code{print} e @code{printf} @`e stato diretto verso lo standard output, che di solito @`e lo schermo. Sia @code{print} che @code{printf} possono @@ -10582,8 +10681,8 @@ comandi della shell, l'unica differenza @`e che si trovano all'interno di un programma @command{awk}. @c the commas here are part of the see also -@cindex istruzione @code{print}, si veda anche ridirezione dell'output -@cindex istruzione @code{printf}, si veda anche ridirezione dell'output +@cindex istruzione @subentry @code{print} @seealso{ridirezione dell'output} +@cindex istruzione @subentry @code{printf} @seealso{ridirezione dell'output} Ci sono quattro forme di ridirezione dell'output: output scritto su un file, output aggiunto in fondo a un file, @@ -10593,9 +10692,9 @@ Vengono descritti per l'istruzione @code{print}, ma funzionano allo stesso modo per @code{printf}: @table @code -@cindex @code{>} (parentesi acuta destra), operatore @code{>} (I/O) -@cindex parentesi acuta destra (@code{>}), operatore @code{>} (I/O) -@cindex operatori, input/output +@cindex @code{>} (parentesi acuta destra) @subentry operatore @code{>} (I/O) +@cindex parentesi @subentry acuta destra (@code{>}) @subentry operatore @code{>} (I/O) +@cindex operatori @subentry input/output @item print @var{elementi} > @var{output-file} Questa ridirezione stampa gli elementi nel file di output chiamato @var{output-file}. Il @value{FN} @var{output-file} pu@`o essere @@ -10634,8 +10733,8 @@ $ @kbd{cat lista-nomi} @noindent Ogni file in output contiene un nome o un numero su ogni riga. -@cindex @code{>} (parentesi acuta destra), operatore @code{>>} (I/O) -@cindex parentesi acuta destra (@code{>}), operatore @code{>>} (I/O) +@cindex @code{>} (parentesi acuta destra) @subentry operatore @code{>>} (I/O) +@cindex parentesi @subentry acuta destra (@code{>}) @subentry operatore @code{>>} (I/O) @item print @var{elementi} >> @var{output-file} Questa ridirezione stampa gli elementi in un file di output preesistente, di nome @var{output-file}. La differenza tra questa ridirezione e quella @@ -10644,9 +10743,9 @@ con un solo @samp{>} @`e che il precedente contenuto (se esiste) di aggiunto in fondo al file. Se @var{output-file} non esiste, viene creato. -@cindex @code{|} (barra verticale), operatore @code{|} (I/O) -@cindex @dfn{pipe}, output -@cindex output, a @dfn{pipe} +@cindex @code{|} (barra verticale) @subentry operatore @code{|} (I/O) +@cindex @dfn{pipe} @subentry output +@cindex output @subentry a @dfn{pipe} @item print @var{elementi} | @var{comando} @`E possibile inviare output a un altro programma usando una @dfn{pipe} invece di inviarlo a un file. Questa ridirezione apre una @dfn{pipe} verso @@ -10670,8 +10769,8 @@ alone for now and let's hope no-one notices. @example @group awk '@{ print $1 > "nomi.non.ordinati" - comando = "sort -r > nomi.ordinati" - print $1 | comando @}' mail-list +comando = "sort -r > nomi.ordinati" +print $1 | comando @}' mail-list @end group @end example @@ -10704,9 +10803,9 @@ perch@'e (se si vuole riusare lo stesso file o comando) esattamente nello stesso modo. @cindex coprocessi -@cindex @code{|} (barra verticale), operatore @code{|&} (I/O) -@cindex operatori, input/output -@cindex differenze tra @command{awk} e @command{gawk}, operatori di input/output +@cindex @code{|} (barra verticale) @subentry operatore @code{|&} (I/O) +@cindex operatori @subentry input/output +@cindex differenze tra @command{awk} e @command{gawk} @subentry operatori di input/output @item print @var{elementi} |& @var{comando} Questa ridirezione stampa gli elementi nell'input di @var{comando}. La differenza tra questa ridirezione e quella @@ -10737,7 +10836,7 @@ il particolare @var{file} o @var{comando} che si @`e specificato non @`e gi@`a stato utilizzato in scrittura dal programma o se @`e stato chiuso dopo l'ultima scrittura. -@cindex debug, stampare +@cindex debug @subentry stampare @`E un errore comune usare la ridirezione @samp{>} per la prima istruzione @code{print} verso un file, e in seguito usare @samp{>>} per le successive scritture in output: @@ -10762,10 +10861,10 @@ Tuttavia il mischiare gli operatori per lo stesso file @`e sintomo di uno stile di programmazione inelegante, e pu@`o causare confusione in chi legge il programma.) -@cindex differenze tra @command{awk} e @command{gawk}, limitazioni di implementazione -@cindex problemi di implementazione, @command{gawk}, limitazioni -@cindex @command{awk}, problemi di implementazione, @dfn{pipe} -@cindex @command{gawk}, problemi di implementazione, @dfn{pipe} +@cindex differenze tra @command{awk} e @command{gawk} @subentry limitazioni di implementazione +@cindex problemi di implementazione @subentry @command{gawk} @subentry limitazioni +@cindex @command{awk} @subentry problemi di implementazione @subentry @dfn{pipe} +@cindex @command{gawk} @subentry problemi di implementazione @subentry @dfn{pipe} @ifnotinfo Come visto in precedenza (@pxref{Note su getline}), @@ -10786,7 +10885,7 @@ aprire tante @dfn{pipeline} quante ne consente il sistema operativo su cui viene eseguito. @sidebar Inviare @dfn{pipe} alla @command{sh} -@cindex shell, inviare comandi tramite @dfn{pipe} alla +@cindex shell @subentry inviare comandi tramite @dfn{pipe} alla Una maniera particolarmente efficace di usare la ridirezione @`e quella di preparare righe di comando da passare @@ -10819,13 +10918,13 @@ righe di comando da passare alla shell. @node FD speciali @section File speciali per flussi standard di dati pre-aperti @cindex standard input -@cindex input, standard +@cindex input @subentry standard @cindex standard output -@cindex output, standard -@cindex errore, output +@cindex output @subentry standard +@cindex errore @subentry in output @cindex standard error @cindex descrittori di file -@cindex file, descrittori, si veda descrittori di file +@cindex file @subentry descrittori @seeentry{descrittori di file} I programmi in esecuzione hanno convenzionalmente tre flussi di input e output a disposizione, gi@`a aperti per la lettura e la scrittura. @@ -10843,9 +10942,9 @@ la ragione per cui ci sono due flussi distinti, standard output e standard error, @`e per poterli ridirigere indipendentemente l'uno dall'altro. -@cindex differenze tra @command{awk} e @command{gawk}, messaggi di errore +@cindex differenze tra @command{awk} e @command{gawk} @subentry messaggi di errore @cindex gestione errori -@cindex errori, gestione degli +@cindex errori @subentry gestione degli Nelle tradizionali implementazioni di @command{awk}, il solo modo per scrivere un messaggio di errore allo standard error in un programma @command{awk} @`e il seguente: @@ -10892,15 +10991,12 @@ direttamente il descrittore di file identificato dal @value{FN}. Questi @command{gawk} @`e disponibile, e non solo in quelli che aderiscono allo standard POSIX: -@cindex estensioni comuni, file speciale @code{/dev/stdin} -@cindex estensioni comuni, file speciale @code{/dev/stdout} -@cindex estensioni comuni, file speciale @code{/dev/stderr} -@c @cindex comuni, estensioni@comma{} file speciale @code{/dev/stdin} -@c @cindex comuni, estensioni@comma{} file speciale @code{/dev/stdout} -@c @cindex comuni, estensioni@comma{} file speciale @code{/dev/stderr} -@cindex nomi di file, flussi standard in @command{gawk} +@cindex estensioni comuni @subentry file speciale @code{/dev/stdin} +@cindex estensioni comuni @subentry file speciale @code{/dev/stdout} +@cindex estensioni comuni @subentry file speciale @code{/dev/stderr} +@cindex nomi @subentry di file @subentry flussi standard in @command{gawk} @cindex @code{/dev/@dots{}}, file speciali -@cindex file, file speciali @code{/dev/@dots{}} +@cindex file @subentry speciali @subentry @code{/dev/@dots{}} @cindex @code{/dev/fd/@var{N}}, file speciali (in @command{gawk}) @table @file @item /dev/stdin @@ -10920,7 +11016,7 @@ la maniera corretta di scrivere un messaggio di errore diviene quindi: print "Ho trovato un errore grave!" > "/dev/stderr" @end example -@cindex debug, doppio apice con nomi di file +@cindex debug @subentry doppio apice con nomi di file Si noti l'uso di doppi apici per racchiudere il @value{FN}. Come per ogni altra ridirezione, il valore dev'essere una stringa. @`E un errore comune omettere i doppi apici, il che conduce a @@ -10933,7 +11029,7 @@ invocato con l'opzione @option{--traditional} (@pxref{Opzioni}). @node File speciali @section @value{FFNS} speciali in @command{gawk} -@cindex @command{gawk}, nomi di file in +@cindex @command{gawk} @subentry nomi di file in Oltre all'accesso a standard input, standard output e standard error, @command{gawk} consente di accedere a ogni descrittore di file aperto. @@ -10975,8 +11071,8 @@ oltre il due, effettivamente chiude il descrittore di file specificato. @node Reti speciali @subsection File speciali per comunicazioni con la rete -@cindex reti, funzionalit@`a per -@cindex TCP/IP, funzionalit@`a per +@cindex reti @subentry funzionalit@`a per +@cindex TCP/IP @subentry funzionalit@`a per I programmi @command{gawk} possono aprire una connessione bidirezionale @@ -11005,8 +11101,9 @@ Sono qui elencate alcune cose da tener presente usando i @value{FNS} speciali forniti da @command{gawk}: @itemize @value{BULLET} -@cindex modalit@`a compatibile di (@command{gawk}), nomi di file -@cindex nomi di file, nella modalit@`a compatibile di @command{gawk} +@cindex modalit@`a compatibile di (@command{gawk}) @subentry nomi di file +@cindex nomi @subentry di file @subentry nella modalit@`a compatibile di @command{gawk} +@cindex modalit@`a POSIX @item Il riconoscimento dei @value{FNS} per i tre file standard pre-aperti @`e disabilitato solo in modalit@`a POSIX. @@ -11030,12 +11127,12 @@ Se lo si fa, il comportamente risultante @`e imprevedibile. @node Chiusura file e @dfn{pipe} @section Chiudere ridirezioni in input e in output -@cindex output, file in, si veda file in output -@cindex input, file in, chiusura -@cindex output, file in, chiusura -@cindex @dfn{pipe}, chiusura -@cindex coprocessi, chiusura -@cindex @code{getline}, comando, coprocessi@comma{} usare dal +@cindex output @subentry file in +@cindex input @subentry chiusura +@cindex file @subentry in output @subentry chiusura di +@cindex @dfn{pipe} @subentry chiusura +@cindex coprocessi @subentry chiusura +@cindex @code{getline} (comando) @subentry coprocessi, usare da Se lo stesso @value{FN} o lo stesso comando di shell @`e usato con @code{getline} pi@`u di una volta durante l'esecuzione di un programma @command{awk} @@ -11143,10 +11240,10 @@ programma chiude la @dfn{pipe} dopo ogni riga dell'output, allora ogni riga costituisce un messaggio separato. @end itemize -@cindex differenze tra @command{awk} e @command{gawk}, funzione @code{close()} -@cindex portabilit@`a, funzione @code{close()} -@cindex funzione @code{close()}, portabilit@`a -@cindex @code{close()}, funzione, portabilit@`a +@cindex differenze tra @command{awk} e @command{gawk} @subentry funzione @code{close()} +@cindex portabilit@`a @subentry funzione @code{close()} +@cindex funzione @subentry @code{close()} @subentry portabilit@`a +@cindex @code{close()} (funzione) @subentry portabilit@`a Se si usano file in numero superiore a quelli che il sistema permette di mantenere aperti, @command{gawk} tenta di riutilizzare i file aperti disponibili fra @@ -11161,12 +11258,12 @@ consideri qualcosa del tipo: @example @{ - @dots{} - comando = ("grep " $1 " /qualche/file | un_mio_programma -q " $3) - while ((comando | getline) > 0) @{ - @var{elabora output di} comando - @} - # qui serve close(comando) +@dots{} +comando = ("grep " $1 " /qualche/file | un_mio_programma -q " $3) +while ((comando | getline) > 0) @{ +@var{elabora output di} comando +@} +# qui serve close(comando) @} @end example @@ -11201,7 +11298,7 @@ stato aperto con una ridirezione, e per questo @command{awk} silenziosamente non fa nulla, tranne impostare un codice di ritorno negativo. -@cindex @code{|} (barra verticale), operatore @code{|&} (I/O), @dfn{pipe}@comma{} chiusura +@cindex @code{|} (barra verticale) @subentry operatore @code{|&} (I/O) @subentry @dfn{pipe}, chiusura Quando si usa l'operatore @samp{|&} per comunicare con un coprocesso, @`e talora utile essere in grado di chiudere un lato della @dfn{pipe} bidirezionale, senza chiudere l'altro lato. @@ -11217,12 +11314,12 @@ rinviata alla che ne parla pi@`u dettagliatamente e fornisce un esempio. @sidebar Usare il codice di ritorno di @code{close()} -@cindex angolo buio, funzione @code{close()} -@cindex funzione @code{close()}, codice di ritorno -@cindex @code{close()}, funzione, codice di ritorno -@cindex codice di ritorno@comma{} funzione @code{close()} -@cindex differenze tra @command{awk} e @command{gawk}, funzione @code{close()} -@cindex Unix @command{awk}, funzione @code{close()} e +@cindex angolo buio @subentry funzione @subentry @code{close()} +@cindex funzione @subentry @code{close()} @subentry codice di ritorno +@cindex @code{close()} (funzione) @subentry codice di ritorno +@cindex codice di ritorno @subentry funzione @code{close()} +@cindex differenze tra @command{awk} e @command{gawk} @subentry funzione @code{close()} +@cindex Unix @command{awk} @subentry funzione @code{close()} e In molte versioni di Unix @command{awk}, la funzione @code{close()} @`e in realt@`a un'istruzione. @@ -11236,9 +11333,9 @@ comando | getline info retval = close(comando) # errore di sintassi in parecchi Unix awk @end example -@cindex @command{gawk}, variabile @code{ERRNO} in -@cindex variabile @code{ERRNO}, con funzione @command{close()} -@cindex @code{ERRNO}, variabile, con funzione @command{close()} +@cindex @command{gawk} @subentry variabile @subentry @code{ERRNO} in +@cindex variabile @subentry @code{ERRNO} @subentry con funzione @command{close()} +@cindex @code{ERRNO} (variabile) @subentry con funzione @command{close()} @command{gawk} gestisce @code{close()} come una funzione. Il codice di ritorno @`e @minus{}1 se l'argomento designa un file che non era mai stato aperto con una ridirezione, o se c'@`e un problema di @@ -11269,6 +11366,8 @@ Questo valore @`e zero se la chiusura riesce, o @minus{}1 se non riesce. @end multitable @end float +@cindex POSIX @subentry modalit@`a +@cindex modalit@`a POSIX Lo standard POSIX @`e molto generico; dice che @code{close()} restituisce zero se @`e terminata correttamente, e un valore diverso da zero nell'altro caso. In generale, @@ -11350,6 +11449,8 @@ o @code{PROCINFO["/dev/stdout", "NONFATAL"]}. Per lo standard error, occorre usare @code{PROCINFO["/dev/stderr", "NONFATAL"]}. +@cindex @env{GAWK_SOCK_RETRIES} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{GAWK_SOCK_RETRIES} Se si tenta di aprire un @dfn{socket} TCP/IP (@pxref{Reti TCP/IP}), @command{gawk} tenta di farlo per un certo numero di volte. La variabile d'ambiente @env{GAWK_SOCK_RETRIES} @@ -11492,7 +11593,7 @@ che forniscono i valori usati nelle espressioni. @node Costanti @subsection Espressioni costanti -@cindex costanti, tipi di +@cindex costanti @subentry tipi di Il tipo di espressione pi@`u semplice @`e una @dfn{costante}, che ha sempre lo stesso valore. Ci sono tre tipi di costanti: numeriche, di stringa e di @@ -11512,8 +11613,8 @@ avere forme diverse, ma sono memorizzate internamente sempre allo stesso modo. @node Costanti scalari @subsubsection Costanti numeriche e stringhe -@cindex costanti numeriche -@cindex numeriche, costanti +@cindex costanti @subentry numeriche +@cindex numeriche @subentry costanti Una @dfn{costante numerica} @`e un numero. Questo numero pu@`o essere un numero intero, una frazione decimale o un numero in notazione scientifica (esponenziale).@footnote{La rappresentazione interna di tutti i numeri, @@ -11529,7 +11630,8 @@ valore: 1050e-1 @end example -@cindex costanti stringa +@cindex costanti @subentry stringa +@cindex stringa @subentry costante Una @dfn{costante stringa} @`e formata da una sequenza di caratteri racchiusi tra doppi apici. Per esempio: @@ -11538,8 +11640,9 @@ doppi apici. Per esempio: @end example @noindent -@cindex differenze tra @command{awk} e @command{gawk}, stringhe -@cindex stringhe, limitazioni della lunghezza +@cindex differenze tra @command{awk} e @command{gawk} @subentry stringhe +@cindex stringa @subentry limitazioni della lunghezza +@cindex ASCII rappresenta la stringa il cui contenuto @`e la parola @samp{pappagallo}. Le stringhe in @command{gawk} possono essere di qualsiasi lunghezza, e possono contenere @@ -11585,9 +11688,9 @@ $ @kbd{gawk 'BEGIN @{ print "ciao, } @print{} gawk: riga com.:1: ^ syntax error @end example -@cindex angolo buio, stringhe, continuazione su pi@`u righe -@cindex stringhe, continuazione su pi@`u righe -@cindex differenze tra @command{awk} e @command{gawk}, stringhe +@cindex angolo buio @subentry stringhe @subentry continuazione su pi@`u righe +@cindex stringa @subentry continuazione su pi@`u righe +@cindex differenze tra @command{awk} e @command{gawk} @subentry stringhe Sebbene POSIX non definisca cosa succede usando un carattere protetto di avanzamento riga, come nell'esempio in linguaggio C visto sopra, tutte le versioni di @command{awk} consentono di @@ -11604,6 +11707,7 @@ $ @kbd{gawk 'BEGIN @{ print "ciao, \} @print{} ciao, mondo @end example +@cindex modalit@`a POSIX In modalit@`a POSIX (@pxref{Opzioni}), @command{gawk} non consente caratteri protetti di avanzamento riga. Altrimenti, il comportamento @`e quello descritto sopra. @@ -11621,10 +11725,10 @@ $ @kbd{nawk 'BEGIN @{ print "ciao, \} @node Numeri non-decimali @subsubsection Numeri ottali ed esadecimali -@cindex ottali, numeri -@cindex esadecimali, numeri -@cindex numeri ottali -@cindex numeri esadecimali +@cindex ottali @subentry numeri +@cindex esadecimali @subentry numeri +@cindex numeri @subentry ottali +@cindex numeri @subentry esadecimali In @command{awk}, tutti i numeri sono espressi nel sistema decimale (cio@`e a base 10). @@ -11671,8 +11775,8 @@ quando si lavora con dati che non possono essere rappresentati convenientemente come caratteri o come numeri regolari, come i dati binari di vario tipo. -@cindex @command{gawk}, numeri ottali e -@cindex @command{gawk}, numeri esadecimali e +@cindex @command{gawk} @subentry numeri ottali e +@cindex @command{gawk} @subentry numeri esadecimali e @command{gawk} permette l'uso di costanti ottali ed esadecimali nel testo di un programma. Comunque, se numeri non-decimali sono presenti tra i dati in input, essi non sono trattati in maniera speciale; trattarli in modo speciale @@ -11701,12 +11805,12 @@ $ @kbd{gawk 'BEGIN @{ print "021 @`e", 021 ; print 018 @}'} @print{} 18 @end example -@cindex modalit@`a compatibile di (@command{gawk}), numeri ottali -@cindex numeri ottali nella modalit@`a compatibile di (@command{gawk}) -@cindex modalit@`a compatibile di (@command{gawk}), numeri esadecimali -@cindex numeri esadecimali nella modalit@`a compatibile di (@command{gawk}) -@cindex compatibile, modalit@`a (@command{gawk}), numeri ottali -@cindex compatibile, modalit@`a (@command{gawk}), numeri esadecimali +@cindex modalit@`a compatibile di (@command{gawk}) @subentry numeri ottali +@cindex numeri @subentry ottali @subentry nella modalit@`a compatibile di (@command{gawk}) +@cindex modalit@`a compatibile di (@command{gawk}) @subentry numeri esadecimali +@cindex numeri @subentry esadecimali @subentry nella modalit@`a compatibile di (@command{gawk}) +@cindex compatibile @subentry modalit@`a (@command{gawk}) @subentry numeri ottali +@cindex compatibile @subentry modalit@`a (@command{gawk}) @subentry numeri esadecimali Le costanti ottali ed esadecimali nel codice sorgente sono un'estensione di @command{gawk}. Se @command{gawk} @`e in modalit@`a compatibile (@pxref{Opzioni}), @@ -11730,12 +11834,12 @@ $ @kbd{gawk 'BEGIN @{ printf "0x11 vale <%s>\n", 0x11 @}'} @node Costanti come espressioni regolari @subsubsection Costanti fornite tramite espressioni regolari -@cindex @dfn{regexp}, costanti -@cindex costanti @dfn{regexp} -@cindex @code{~} (tilde), operatore @code{~} -@cindex tilde (@code{~}), operatore @code{~} -@cindex @code{!} (punto esclamativo), operatore @code{!~} -@cindex punto esclamativo (@code{!}), operatore @code{!~} +@cindex @dfn{regexp} @subentry costanti +@cindex costanti @subentry @dfn{regexp} +@cindex @code{~} (tilde) @subentry operatore @code{~} +@cindex tilde (@code{~}) @subentry operatore @code{~} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!~} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!~} Una @dfn{costante regexp} @`e la descrizione di un'espressione regolare delimitata da barre, come @code{@w{/^inizio e fine$/}}. La maggior parte delle @@ -11770,7 +11874,7 @@ un'estensione @command{gawk}. @node Costanti @dfn{regexp} normali @subsubsection Costanti @dfn{regexp} normali in @command{awk}. -@cindex angolo buio, costanti @dfn{regexp} +@cindex angolo buio @subentry costanti @dfn{regexp} Quand'@`e usata a destra degli operatori @samp{~} o @samp{!~}, una costante @dfn{regexp} rappresenta semplicemente l'espressione regolare che dev'essere confrontata. Comunque, le costanti @dfn{regexp} (come @code{/pippo/}) @@ -11808,8 +11912,8 @@ if (/pippo/ ~ $1) print "trovato pippo" @c @cindex automatic warnings @c @cindex warnings, automatic -@cindex @command{gawk}, costanti @dfn{regexp} e -@cindex costanti @dfn{regexp}, in @command{gawk} +@cindex @command{gawk} @subentry costanti @dfn{regexp} e +@cindex costanti @subentry @dfn{regexp} @subentry in @command{gawk} @noindent Questo codice ``ovviamente'' intende verificare se @code{$1} contiene l'espressione regolare @code{/pippo/}. Ma in effetti l'espressione @@ -11831,8 +11935,8 @@ confronta = /pippo/ assegna zero o uno alla variabile @code{confronta}, a seconda del contenuto del record in input corrente. -@cindex differenze tra @command{awk} e @command{gawk}, costanti @dfn{regexp} -@cindex angolo buio, costanti @dfn{regexp}, come argomenti a funzioni definite dall'utente +@cindex differenze tra @command{awk} e @command{gawk} @subentry costanti @dfn{regexp} +@cindex angolo buio @subentry costanti @dfn{regexp} @subentry come argomenti a funzioni definite dall'utente @cindexgawkfunc{gensub} @cindexawkfunc{sub} @cindexawkfunc{gsub} @@ -11929,7 +12033,7 @@ sarebbe bello poter avere costanti @dfn{regexp} che sono una @dfn{regexp} utile per effettuare dei confronti, e non una semplice espressione regolare. -@cindex valori, @dfn{regexp} +@cindex valori @subentry @dfn{regexp} @command{gawk} prevede questa funzionalit@`a. Un'espressione regolare fortemente tipizzata @`e molto simile a un'espressione regolare normale, tranne per il fatto di essere preceduta dal simbolo @samp{@@}: @@ -12000,8 +12104,8 @@ al valore di stringa del testo della @dfn{regexp} originale. @node Variabili @subsection Variabili -@cindex variabili definite dall'utente -@cindex definite dall'utente, variabili +@cindex variabili @subentry definite dall'utente +@cindex definite dall'utente @subentry @dfn{Si veda} variabili definite dall'utente Le @dfn{variabili} consentono di memorizzare valori in un certo punto di un programma, per usarli pi@`u tardi in un'altra parte del programma. Le variabili possono essere gestite interamente all'interno del testo del programma, ma @@ -12042,8 +12146,8 @@ contenuto dei loro parametri che sono costituiti da vettori (@pxref{Funzioni per stringhe}). -@cindex variabili, predefinite -@cindex variabili, inizializzazione +@cindex variabili @subentry predefinite +@cindex variabili @subentry inizializzazione Alcune variabili hanno un significato speciale predefinito, come @code{FS} (il separatore di campo) e @code{NF} (il numero di campi nel record di input corrente). @xref{Variabili predefinite} per un elenco delle variabili @@ -12063,8 +12167,8 @@ tradizionali. @node Opzioni di assegnamento @subsubsection Assegnare una variabile dalla riga di comando -@cindex variabili, assegnare da riga di comando -@cindex riga di comando, variabili@comma{} assegnare da +@cindex variabili @subentry assegnare da riga di comando +@cindex riga di comando @subentry variabili @subentry assegnare da Si pu@`o impostare qualsiasi variabile @command{awk} includendo un @dfn{assegnamento di variabile} tra gli argomenti sulla riga di comando quando @@ -12075,7 +12179,8 @@ Tale assegnamento ha la seguente forma: @var{variabile}=@var{testo} @end example -@cindex @option{-v}, opzione +@cindex @option{-v} (opzione) +@cindex opzione @subentry @option{-v} @noindent Con questo assegnamento, una variabile viene impostata o all'inizio dell'esecuzione di @command{awk} o tra la lettura di un file in input e il @@ -12120,7 +12225,7 @@ $ @kbd{awk '@{ print $n @}' n=4 inventory-shipped n=2 mail-list} @dots{} @end example -@cindex angolo buio, argomenti da riga di comando +@cindex angolo buio @subentry argomenti da riga di comando Gli argomenti da riga di comando sono resi disponibili dal programma @command{awk} nel vettore @code{ARGV} per poter essere esaminati esplicitamente (@pxref{ARGC e ARGV}). @@ -12165,10 +12270,10 @@ questa @value{SECTION} tratta di quest'importante sfaccettatura di @command{awk} @node Stringhe e numeri @subsubsection Come @command{awk} converte tra stringhe e numeri -@cindex conversione da stringhe a numeri -@cindex stringhe, conversione -@cindex numeri, conversione in stringhe -@cindex conversione da numeri a stringhe +@cindex conversione @subentry da stringa a numero +@cindex stringa @subentry conversione +@cindex numeri @subentry conversione in stringhe +@cindex conversione @subentry da numero a stringa Le stringhe sono convertite in numeri e i numeri sono convertiti in stringhe, se il contesto del programma @command{awk} lo richiede. Per esempio, se il valore di @code{pippo} o @code{pluto} nell'espressione @samp{pippo + pluto} @@ -12189,9 +12294,9 @@ variabili @code{due} e @code{tre} sono convertiti in stringhe e concatenati insieme. La stringa risultante @`e riconvertita nel numero 23, al quale poi viene aggiunto 4. -@cindex stringa nulla, conversione da tipo numerico a tipo stringa -@cindex conversione di tipo variabile -@cindex variabile, conversione di tipo +@cindex stringa nulla @subentry conversione da tipo numerico a tipo stringa +@cindex conversione @subentry di tipo di variabile +@cindex variabili @subentry conversione di tipo Se, per qualche ragione, si vuole forzare la conversione di un numero in una stringa, basta concatenare a quel numero la stringa nulla, @code{""}. Per forzare la conversione di una stringa in un numero, basta aggiungere zero @@ -12202,7 +12307,7 @@ qualsiasi prefisso numerico della stringa come numero: Le stringhe che non possono essere interpretate come numeri validi vengono convertite al valore zero. -@cindex @code{CONVFMT}, variabile +@cindex @code{CONVFMT} (variabile) Il modo esatto in cui i numeri sono convertiti in stringhe @`e controllato dalla variabile predefinita di @command{awk} @code{CONVFMT} (@pxref{Variabili predefinite}). I numeri vengono convertiti usando la @@ -12218,7 +12323,7 @@ normalmente bastano 17 cifre per esprimere esattamente il valore di un numero in virgola mobile.@footnote{Per casi eccezionali possono essere richieste fino a 752 cifre (!), non sembra che sia il caso di preoccuparsene qui.} -@cindex angolo buio, variabile @code{CONVFMT} +@cindex angolo buio @subentry variabile @subentry @code{CONVFMT} Si possono avere strani risultati se si imposta @code{CONVFMT} a una stringa che non indica a @code{sprintf()} come formattare i numeri in virgola mobile in un modo utile. Per esempio, se ci si dimentica la @samp{%} nel formato, @@ -12239,10 +12344,10 @@ b = a "" @value{DARKCORNER} @sidebar @command{awk} prima di POSIX usava @code{OFMT} per la conversione di stringhe -@cindex POSIX @command{awk}, variabile @code{OFMT} e -@cindex @code{OFMT}, variabile -@cindex portabilit@`a, nuovo @command{awk} vs.@: vecchio @command{awk} -@cindex @command{awk}, nuovo vs.@: vecchio, variabile @code{OFMT} +@cindex POSIX @command{awk} @subentry @code{OFMT} (variabile) +@cindex @code{OFMT} (variabile) +@cindex portabilit@`a @subentry nuovo @command{awk} vs.@: vecchio @command{awk} +@cindex @command{awk} @subentry nuovo vs.@: vecchio @subentry variabile @code{OFMT} Prima dello standard POSIX, @command{awk} usava il valore di @code{OFMT} per convertire i numeri in stringhe. @code{OFMT} specifica il formato di output da usare per la stampa dei numeri con @code{print}. @code{CONVFMT} fu introdotto @@ -12257,7 +12362,7 @@ per separare la semantica della conversione dalla semantica della stampa. Sia @subsubsection Le localizzazioni possono influire sulle conversioni Il luogo dove si @`e pu@`o avere importanza quando si tratta di convertire numeri e -stringhe. La lingua e i caratteri---la @dfn{localizzazione}---possono +stringhe. La lingua e i caratteri --- la @dfn{localizzazione} --- possono influire sui formati numerici. In particolare, per i programmi @command{awk}, influiscono sui caratteri separatore decimale e separatore delle migliaia. La localizzazione @code{"C"}, e la maggior parte delle localizzazioni inglesi, @@ -12268,7 +12373,7 @@ europee e non inglesi usano la virgola (@samp{,}) come separatore dei decimali. Le localizzazioni europee spesso usano o lo spazio o il punto come separatore delle migliaia, all'occorrenza. -@cindex angolo buio, carattere di separazione dei decimali nelle localizzazioni +@cindex angolo buio @subentry carattere di separazione dei decimali nelle localizzazioni Lo standard POSIX prevede che @command{awk} usi sempre il punto come separatore dei decimali nel codice sorgente del programma @command{awk}, e per gli assegnamenti di variabile da riga di comando (@pxref{Altri argomenti}). @@ -12299,6 +12404,7 @@ normale, @command{gawk} tratta @samp{4,321} come 4, mentre nella localizzazione danese @`e trattato come numero completo comprendente la parte frazionaria, 4.321. +@cindex modalit@`a POSIX Alcune delle prime versioni di @command{gawk} si conformavano completamente con quest'aspetto dello standard. Tuttavia, molti utenti di localizzazioni non inglesi si lamentavano di questo comportamento, perch@'e i loro dati usavano il @@ -12355,8 +12461,8 @@ dei valori forniti da costanti e variabili. @node Operatori aritmetici @subsection Operatori aritmetici -@cindex aritmetici, operatori -@cindex operatori aritmetici +@cindex aritmetici @subentry operatori +@cindex operatori @subentry aritmetici @c @cindex addition @c @cindex subtraction @c @cindex multiplication @@ -12395,8 +12501,8 @@ La lista seguente elenca gli operatori aritmetici in @command{awk}, in ordine di precedenza, da quella pi@`u alta a quella pi@`u bassa: @table @code -@cindex estensioni comuni, operatore @code{**} -@cindex POSIX @command{awk}, operatori aritmetici e +@cindex estensioni comuni @subentry operatore @code{**} +@cindex POSIX @command{awk} @subentry operatori aritmetici @item @var{x} ^ @var{y} @itemx @var{x} ** @var{y} Elevamento a potenza; @var{x} elevato alla potenza @var{y}. @samp{2 ^ 3} @@ -12412,12 +12518,12 @@ Pi@`u unario; l'espressione @`e convertita in un numero. @item @var{x} * @var{y} Moltiplicazione. -@cindex risoluzione di problemi, divisione -@cindex problemi, risoluzione di, divisione +@cindex risoluzione di problemi @subentry divisione +@cindex problemi @subentry risoluzione di @subentry divisione @cindex divisione @item @var{x} / @var{y} Divisione; poich@'e tutti i numeri in @command{awk} sono numeri in virgola -mobile, il risultato @emph{non} @`e arrotondato all'intero---@samp{3 / 4} ha il +mobile, il risultato @emph{non} @`e arrotondato all'intero --- @samp{3 / 4} ha il valore di 0.75. (Un errore comune, specialmente tra i programmatori in C, @`e quello di dimenticare che @emph{tutti} i numeri in @command{awk} sono in virgola mobile, e che la divisione di costanti rappresentate da numeri interi produce un @@ -12438,8 +12544,8 @@ Il pi@`u e il meno unari hanno la stessa precedenza, gli operatori di moltiplicazione hanno tutti la stessa precedenza, e l'addizione e la sottrazione hanno la stessa precedenza. -@cindex differenze tra @command{awk} e @command{gawk}, operazione di modulo-troncamento -@cindex modulo-troncamento, operazione di +@cindex differenze tra @command{awk} e @command{gawk} @subentry operazione di modulo-troncamento +@cindex modulo-troncamento @subentry operazione di Quando si calcola il resto di @samp{@var{x} % @var{y}}, il quoziente @`e troncato all'intero e moltiplicato per @var{y}. Questo risultato @`e sottratto da @var{x}; @@ -12461,9 +12567,9 @@ In altre implementazioni di @command{awk} il segno del resto pu@`o essere dipendente dalla macchina. @c FIXME !!! what does posix say? -@cindex portabilit@`a, operatore @code{**} -@cindex @code{*} (asterisco), operatore @code{**} -@cindex asterisco (@code{*}), operatore @code{**} +@cindex portabilit@`a @subentry operatore @code{**} +@cindex @code{*} (asterisco) @subentry operatore @code{**} +@cindex asterisco (@code{*}) @subentry operatore @code{**} @quotation NOTA Lo standard POSIX specifica solo l'uso di @samp{^} per l'elevamento a potenza. @@ -12478,8 +12584,8 @@ Per garantire la massima portabilit@`a @`e meglio non usare l'operatore @samp{** @author Brian Kernighan @end quotation -@cindex operatori di stringa -@cindex stringa, operatori di +@cindex operatori @subentry di stringa +@cindex stringa @subentry operatori di @cindex concatenare C'@`e una sola operazione di stringa: la concatenazione. Non ha un operatore specifico per rappresentarla. Piuttosto, la concatenazione @`e effettuata @@ -12503,8 +12609,8 @@ $ @kbd{awk '@{ print "Campo numero uno:" $1 @}' mail-list} @dots{} @end example -@cindex risoluzione di problemi, concatenazione di stringhe -@cindex problemi, risoluzione di, concatenazione di stringhe +@cindex risoluzione di problemi @subentry concatenazione di stringhe +@cindex problemi @subentry risoluzione di @subentry concatenazione di stringhe Poich@'e la concatenazione di stringhe non ha un operatore esplicito, @`e spesso necessario assicurarsi che venga effettuata al momento giusto usando le parentesi per racchiudere gli elementi da concatenare. Per esempio, ci si @@ -12517,9 +12623,9 @@ file = "file" print "qualcosa di significativo" > nome file @end example -@cindex Brian Kernighan, @command{awk} di -@cindex @command{mawk}, programma di utilit@`a -@cindex programma di utilit@`a @command{mawk} +@cindex Brian Kernighan @subentry @command{awk} di +@cindex @command{mawk} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{mawk} @noindent Questo produce un errore di sintassi in alcune versioni di @command{awk} per Unix.@footnote{Pu@`o capitare che BWK @command{awk}, @@ -12531,8 +12637,8 @@ ma non ci si dovrebbe fare affidamento.} print "qualcosa di significativo" > (nome file) @end example -@cindex ordine di valutazione, concatenazione -@cindex valutazione, ordine di, concatenazione +@cindex ordine di valutazione @subentry concatenazione +@cindex valutazione @subentry ordine di @subentry concatenazione @cindex effetti collaterali Si dovrebbero usare le parentesi attorno alle concatenazioni in tutti i contesti non comuni, come, per esempio, sul lato destro di @samp{=}. @@ -12614,11 +12720,11 @@ certi di quel che si ottiene. @node Operatori di assegnamento @subsection Espressioni di assegnamento -@cindex operatori di assegnamento -@cindex assegnamento, operatori di -@cindex espressioni di assegnamento -@cindex @code{=} (uguale), operatore @code{=} -@cindex uguale (@code{=}), operatore @code{=} +@cindex operatori @subentry di assegnamento +@cindex assegnamento @subentry operatori di +@cindex espressioni @subentry di assegnamento +@cindex @code{=} (uguale) @subentry operatore @code{=} +@cindex uguale (@code{=}) @subentry operatore @code{=} Un @dfn{assegnamento} @`e un'espressione che memorizza un valore (generalmente diverso da quello che la variabile aveva in precedenza) in una variabile. Per esempio, si assegni il valore uno alla variabile @code{z}: @@ -12642,7 +12748,7 @@ messaggio = "questo " cosa " @`e " predicato @end example @noindent -@cindex effetti collaterali, espressioni di assegnamento +@cindex effetti collaterali @subentry espressioni di assegnamento Quest'esempio illustra anche la concatenazione di stringhe. Il segno @samp{=} @`e un @dfn{operatore di assegnamento}. @`E il pi@`u semplice fra gli operatori di assegnamento perch@'e il valore dell'operando di destra @@ -12656,8 +12762,8 @@ un @dfn{effetto collaterale}. @cindex @dfn{lvalue/rvalue} @cindex @dfn{rvalue/lvalue} -@cindex assegnamento, operatori di, @dfn{lvalue/rvalue} -@cindex operatori di assegnamento +@cindex assegnamento @subentry operatori di @subentry @dfn{lvalue/rvalue} +@cindex operatori @subentry di assegnamento L'operando di sinistra non dev'essere necessariamente una variabile (@pxref{Variabili}); pu@`o essere anche un campo (@pxref{Cambiare i campi}) o @@ -12674,7 +12780,7 @@ produce un nuovo valore che l'assegnamento memorizza nella variabile, nel campo o nell'elemento di vettore specificati. Tali valori sono chiamati @dfn{rvalue}. -@cindex variabili, tipi di +@cindex variabili @subentry tipi di @`E importante notare che le variabili @emph{non} hanno dei tipi permanenti. Il tipo di una variabile @`e semplicemente quello di qualsiasi valore le sia stato assegnato per ultimo. Nel seguente frammento di programma, la variabile @@ -12733,8 +12839,8 @@ uno, e poi verificare se @code{x} @`e uguale a uno. Per@`o questo stile rende i programmi difficili da leggere; una tale nidificazione di assegnamenti dovrebbe essere evitata, eccetto forse in un programma usa-e-getta. -@cindex @code{+} (pi@`u), operatore @code{+=} -@cindex pi@`u (@code{+}), operatore @code{+=} +@cindex @code{+} (pi@`u) @subentry operatore @code{+=} +@cindex pi@`u (@code{+}) @subentry operatore @code{+=} Accanto a @samp{=}, ci sono diversi altri operatori di assegnamento che eseguono calcoli col vecchio valore di una variabile. Per esempio, l'operatore @samp{+=} calcola un nuovo valore aggiungendo il valore sul lato @@ -12777,8 +12883,8 @@ BEGIN @{ @end group @end example -@cindex operatori di assegnamento, ordine di valutazione -@cindex assegnamento, operatori di, ordine di valutazione +@cindex operatori @subentry di assegnamento @subentry ordine di valutazione +@cindex assegnamento @subentry operatori di @subentry ordine di valutazione @noindent @`E praticamente certo che gli indici di @code{pluto} siano differenti, perch@'e @code{rand()} restituisce valori differenti ogni volta che viene chiamata. @@ -12816,18 +12922,18 @@ La @ref{table-assign-ops} elenca gli operatori di assegnamento aritmetici. In ogni caso, l'operando di destra @`e un'espressione il cui valore @`e convertito in un numero. -@cindex @code{-} (meno), operatore @code{-=} -@cindex meno (@code{-}), operatore @code{-=} -@cindex @code{*} (asterisco), operatore @code{*=} -@cindex asterisco (@code{*}), operatore @code{*=} -@cindex @code{/} (barra), operatore @code{/=} -@cindex barra (@code{/}), operatore @code{/=} -@cindex @code{%} (percento), operatore @code{%=} -@cindex percento (@code{%}), operatore @code{%=} -@cindex @code{^} (circonflesso), operatore @code{^=} -@cindex circonflesso (@code{^}), operatore @code{^=} -@cindex @code{*} (asterisco), operatore @code{**=} -@cindex asterisco (@code{*}), operatore @code{**=} +@cindex @code{-} (meno) @subentry operatore @code{-=} +@cindex meno (@code{-}) @subentry operatore @code{-=} +@cindex @code{*} (asterisco) @subentry operatore @code{*=} +@cindex asterisco (@code{*}) @subentry operatore @code{*=} +@cindex @code{/} (barra) @subentry operatore @code{/=} +@cindex barra (@code{/}) @subentry operatore @code{/=} +@cindex @code{%} (percento) @subentry operatore @code{%=} +@cindex percento (@code{%}) @subentry operatore @code{%=} +@cindex @code{^} (circonflesso) @subentry operatore @code{^=} +@cindex circonflesso (@code{^}) @subentry operatore @code{^=} +@cindex @code{*} (asterisco) @subentry operatore @code{**=} +@cindex asterisco (@code{*}) @subentry operatore @code{**=} @float Tabella,table-assign-ops @caption{Operatori di assegnamento aritmetici} @multitable @columnfractions .30 .70 @@ -12837,35 +12943,34 @@ un numero. @item @var{lvalue} @code{*=} @var{coefficiente} @tab Moltiplica il valore di @var{lvalue} per @var{coefficiente}. @item @var{lvalue} @code{/=} @var{divisore} @tab Divide il valore di @var{lvalue} per @var{divisore}. @item @var{lvalue} @code{%=} @var{modulo} @tab Imposta @var{lvalue} al resto della sua divisione per @var{modulo}. -@cindex estensioni comuni, operatore @code{**=} -@cindex estensioni comuni@comma{} operatore @code{**=} -@cindex @command{awk}, linguaggio, versione POSIX +@cindex estensioni comuni @subentry operatore @code{**=} +@cindex estensioni comuni @subentry operatore @code{**=} +@cindex @command{awk} @subentry linguaggio @subentry versione POSIX @cindex POSIX @command{awk} @item @var{lvalue} @code{^=} @var{esponente} @tab Eleva @var{lvalue} alla potenza @var{esponente}. @item @var{lvalue} @code{**=} @var{esponente} @tab Eleva @var{lvalue} alla potenza @var{esponente}. @value{COMMONEXT} @end multitable @end float -@cindex POSIX @command{awk}, operatore @code{**=} e -@cindex portabilit@`a, operatore @code{**=} +@cindex POSIX @command{awk} @subentry @code{**=} (operatore) +@cindex portabilit@`a @subentry operatore @code{**=} @quotation NOTA Soltanto l'operatore @samp{^=} @`e definito da POSIX. Per avere la massima portabilit@`a, non usare l'operatore @samp{**=}. @end quotation @sidebar Ambiguit@`a sintattiche tra @samp{/=} e le espressioni regolari -@cindex angolo buio, costanti @dfn{regexp}, operatore @code{/=} e -@cindex @code{/} (barra), operatore @code{/=}, vs. costante @dfn{regexp} @code{/=@dots{}/} -@cindex barra (@code{/}), operatore @code{/=}, vs. costante @dfn{regexp} @code{/=@dots{}/} -@cindex @dfn{regexp}, costanti, @code{/=@dots{}/}, operatore @code{/=} e +@cindex angolo buio @subentry costanti @dfn{regexp} @subentry operatore @code{/=} e +@cindex @code{/} (barra) @subentry operatore @code{/=} @subentry vs. costante @dfn{regexp} @code{/=@dots{}/} +@cindex barra (@code{/}) @subentry operatore @code{/=} @subentry vs. costante @dfn{regexp} @code{/=@dots{}/} +@cindex @dfn{regexp} @subentry costanti @subentry @code{/=@dots{}/}, operatore @code{/=} e @c derived from email from "Nelson H. F. Beebe" <beebe@math.utah.edu> @c Date: Mon, 1 Sep 1997 13:38:35 -0600 (MDT) -@cindex angolo buio, operatore @code{/=} vs. costante @dfn{regexp} @code{/=@dots{}/} +@cindex angolo buio @subentry operatore @code{/=} vs. costante @dfn{regexp} @code{/=@dots{}/} @cindex ambiguit@`a sintattica: operatore @code{/=} vs. costante @dfn{regexp} @code{/=@dots{}/} -@cindex sintattica, ambiguit@`a: operatore @code{/=} vs. costante @dfn{regexp} @code{/=@dots{}/} -@cindex @code{/=}, operatore, vs. costante @dfn{regexp} @code{/=@dots{}/} +@cindex sintattica @subentry ambiguit@`a: operatore @code{/=} vs. costante @dfn{regexp} @code{/=@dots{}/} C'@`e un'ambiguit@`a sintattica tra l'operatore di assegnamento @code{/=} e le costanti @dfn{regexp} il cui primo carattere sia @samp{=}. @value{DARKCORNER} @@ -12894,8 +12999,8 @@ e @command{mawk}. @node Operatori di incremento @subsection Operatori di incremento e di decremento -@cindex incremento, operatori di -@cindex operatori di decremento/incremento +@cindex incremento @subentry operatori di +@cindex operatori @subentry di decremento/incremento Gli @dfn{operatori di incremento} e @dfn{decremento} incrementano o riducono il valore di una variabile di uno. Un operatore di assegnamento pu@`o fare la stessa cosa, per cui gli operatori di incremento non aggiungono funzionalit@`a @@ -12903,9 +13008,9 @@ al inguaggio @command{awk}; in ogni caso, sono delle convenienti abbreviazioni per operazioni molto comuni. @cindex effetti collaterali -@cindex @code{+} (pi@`u), operatore @code{++} -@cindex pi@`u (@code{+}), operatore @code{++} -@cindex effetti collaterali, operatori di decremento/incremento +@cindex @code{+} (pi@`u) @subentry operatore @code{++} +@cindex pi@`u (@code{+}) @subentry operatore @code{++} +@cindex effetti collaterali @subentry operatori di decremento/incremento L'operatore per aggiungere uno @`e @samp{++}. Pu@`o essere usato per incrementare una variabile prima o dopo aver stabilito il suo valore. Per @dfn{preincrementare} una variabile @code{v}, si scrive @samp{++v}. Questo aggiunge uno al valore di @@ -12936,15 +13041,15 @@ fare con numeri relativamente piccoli (inferiori a @end ifnotinfo @end ifnottex -@cindex @code{$} (dollaro), incrementare campi e vettori -@cindex dollaro (@code{$}), incrementare campi e vettori +@cindex @code{$} (dollaro) @subentry incrementare campi e vettori +@cindex dollaro (@code{$}) @subentry incrementare campi e vettori I campi di un record e gli elementi di un vettore vengono incrementati proprio come le variabili. (Si deve usare @samp{$(i++)} quando si deve fare un riferimento a un campo e incrementare una variabile allo stesso tempo. Le parentesi sono necessarie a causa della precedenza dell'operatore di riferimento @samp{$}.) -@cindex decremento, operatori di +@cindex decremento @subentry operatori di L'operatore di decremento @samp{--} funziona proprio come @samp{++}, solo che sottrae uno anzich@'e aggiungerlo. Come @samp{++}, si pu@`o usare prima di @dfn{lvalue} @@ -12953,8 +13058,8 @@ Quel che segue @`e un sommario delle espressioni di incremento e di decremento: @table @code -@cindex @code{+} (pi@`u), operatore @code{++} -@cindex pi@`u (@code{+}), operatore @code{++} +@cindex @code{+} (pi@`u) @subentry operatore @code{++} +@cindex pi@`u (@code{+}) @subentry operatore @code{++} @item ++@var{lvalue} Incrementa @var{lvalue}, restituendo il nuovo valore come valore dell'espressione. @@ -12963,8 +13068,8 @@ valore dell'espressione. Incrementa @var{lvalue}, restituendo il @emph{vecchio} valore di @var{lvalue} come valore dell'espressione. -@cindex @code{-} (meno), operatore @code{--} -@cindex meno (@code{-}), operatore @code{--} +@cindex @code{-} (meno) @subentry operatore @code{--} +@cindex meno (@code{-}) @subentry operatore @code{--} @item --@var{lvalue} Decrementa @var{lvalue}, restituendo il nuovo valore come valore dell'espressione. @@ -12980,9 +13085,9 @@ come valore dell'espressione. @sidebar Ordine di valutazione degli operatori @cindex precedenza -@cindex operatori, precedenza degli -@cindex portabilit@`a, operatori -@cindex valutazione, ordine di +@cindex operatori @subentry precedenza degli +@cindex portabilit@`a @subentry operatori +@cindex valutazione @subentry ordine di @cindex Marx, Groucho @quotation @i{Dottore, quando faccio cos@`{@dotless{i}} mi fa male!@* @@ -13046,12 +13151,12 @@ e come questi valori sono confrontati. @node Valori di verit@`a @subsection Vero e falso in @command{awk} -@cindex valori di verit@`a -@cindex logico, valore, vero/falso -@cindex falso, valore logico (zero o stringa nulla) -@cindex vero, valore logico (diverso da zero e da stringa nulla) +@cindex valori @subentry di verit@`a +@cindex logico @subentry valore @subentry vero/falso +@cindex falso @subentry valore logico (zero o stringa nulla) +@cindex vero @subentry valore logico (diverso da zero e da stringa nulla) -@cindex nulle, stringhe +@cindex nulle @subentry stringhe Molti linguaggi di programmazione hanno una particolare rappresentazione per i concetti di ``vero'' e ``falso.'' Questi linguaggi usano normalmente le costanti speciali @code{true} e @code{false}, o forse i loro equivalenti @@ -13074,7 +13179,7 @@ BEGIN @{ @} @end example -@cindex angolo buio, @code{"0"} @`e effettivamente vero +@cindex angolo buio @subentry @code{"0"} @`e effettivamente vero C'@`e una conseguenza sorprendente della regola ``non zero o non nullo'': la costante di stringa @code{"0"} sta effettivamente per vero, perch@'e @`e non nulla. @@ -13090,14 +13195,14 @@ la costante di stringa @code{"0"} sta effettivamente per vero, perch@'e @c The Restaurant at the End of the Universe. But I'm going to @c leave it alone. -@cindex confronto, espressioni di -@cindex espressioni di confronto -@cindex espressioni, ricerca di corrispondenze, si veda espressioni di confronto -@cindex individuazione, espressioni di, si veda espressioni di confronto -@cindex relazionali, operatori, si veda espressioni di confronto -@cindex operatori relazionali, si veda espressioni di confronto -@cindex variabile, tipi di -@cindex variabili, tipi di, espressioni di confronto e +@cindex confronto @subentry espressioni di +@cindex espressioni @subentry di confronto +@cindex espressioni @subentry ricerca di corrispondenze @seeentry{espressioni di confronto} +@cindex individuare @subentry tramite espressioni @seeentry{espressioni di confronto} +@cindex relazionali @subentry operatori @seeentry{espressioni di confronto} +@cindex operatori @subentry relazionali @seeentry{espressioni di confronto} +@cindex variabili @subentry tipi di +@cindex variabili @subentry tipi di @subentry espressioni di confronto e Diversamente che in altri linguaggi di programmazione, le variabili di @command{awk} non hanno un tipo fisso. Possono essere sia un numero che una stringa, a seconda del valore loro assegnato. @@ -13202,9 +13307,9 @@ $ @kbd{echo 37 | awk '@{ printf("%s %s < 42\n", $1,} Queste sono le regole seguite per determinare quando @command{awk} tratta dei dati in input come numeri, e quando li considera stringhe. -@cindex numeriche, stringhe -@cindex stringhe, numeriche -@cindex POSIX @command{awk}, stringhe numeriche e +@cindex numeriche @subentry stringhe +@cindex stringa @subentry numerica +@cindex POSIX @command{awk} @subentry stringhe numeriche Lo standard POSIX usa il concetto di @dfn{stringa numerica}, per dei dati in input che appaiono essere numerici. Il @samp{37} nell'esempio precedente @`e una stringa numerica. Quindi, qual @`e il tipo di una stringa numerica? @@ -13361,12 +13466,12 @@ STRNUM | string numeric numeric @end docbook -L'idea di base @`e che l'input dell'utente che appare come numerico---e -@emph{solo} l'input dell'utente---dovrebbe essere trattato come numerico, anche +L'idea di base @`e che l'input dell'utente che appare come numerico --- e +@emph{solo} l'input dell'utente --- dovrebbe essere trattato come numerico, anche se in realt@`a @`e un insieme di caratteri e quindi anche una stringa. Cos@`{@dotless{i}}, ad esempio, la costante di stringa @w{@code{" +3.14"}}, quando appare nel codice sorgente di un programma, -@`e una stringa---anche se sembra numerica---e non +@`e una stringa --- anche se sembra numerica --- e non viene @emph{mai} trattato come numero ai fini di un confronto. @@ -13417,29 +13522,30 @@ $ @kbd{echo salve 37 | gawk '@{ print typeof($1), typeof($2) @}'} @node Operatori di confronto @subsubsection Operatori di confronto +@cindex operatori @subentry di confronto Le @dfn{espressioni di confronto} confrontano stringhe o numeri per metterli in relazione tra di loro, come ad esempio nella relazione di uguaglianza. Sono scritte usando @dfn{operatori di relazione}, che sono un superinsieme di quelli in C. Sono descritti nella @ref{table-relational-ops}. -@cindex @code{<} (parentesi acuta sinistra), operatore @code{<} -@cindex parentesi acuta sinistra (@code{<}), operatore @code{<} -@cindex @code{<} (parentesi acuta sinistra), operatore @code{<=} -@cindex parentesi acuta sinistra (@code{<}), operatore @code{<=} -@cindex @code{>} (parentesi acuta destra), operatore @code{>=} -@cindex parentesi acuta destra (@code{>}), operatore @code{>=} -@cindex @code{>} (parentesi acuta destra), operatore @code{>} -@cindex parentesi acuta destra (@code{>}), operatore @code{>} -@cindex @code{=} (uguale), operatore @code{==} -@cindex uguale (@code{=}), operatore @code{==} -@cindex @code{!} (punto esclamativo), operatore @code{!=} -@cindex punto esclamativo (@code{!}), operatore @code{!=} -@cindex @code{~} (tilde), operatore @code{~} -@cindex tilde (@code{~}), operatore @code{~} -@cindex @code{!} (punto esclamativo), operatore @code{!~} -@cindex punto esclamativo (@code{!}), operatore @code{!~} -@cindex @code{in}, operatore +@cindex @code{<} (parentesi acuta sinistra) @subentry operatore @code{<} +@cindex parentesi @subentry acuta sinistra (@code{<}) @subentry operatore @code{<} +@cindex @code{<} (parentesi acuta sinistra) @subentry operatore @code{<=} +@cindex parentesi @subentry acuta sinistra (@code{<}) @subentry operatore @code{<=} +@cindex @code{>} (parentesi acuta destra) @subentry operatore @code{>=} +@cindex parentesi @subentry acuta destra (@code{>}) @subentry operatore @code{>=} +@cindex @code{>} (parentesi acuta destra) @subentry operatore @code{>} +@cindex parentesi @subentry acuta destra (@code{>}) @subentry operatore @code{>} +@cindex @code{=} (uguale) @subentry operatore @code{==} +@cindex uguale (@code{=}) @subentry operatore @code{==} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!=} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!=} +@cindex @code{~} (tilde) @subentry operatore @code{~} +@cindex tilde (@code{~}) @subentry operatore @code{~} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!~} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!~} +@cindex @code{in} (operatore) @float Tabella,table-relational-ops @caption{Operatori di relazione} @multitable @columnfractions .23 .77 @@ -13467,8 +13573,8 @@ e cos@`{@dotless{i}} via. Quindi, @code{"10"} @`e minore di @code{"9"}. Se vi stringhe di cui una @`e il prefisso dell'altra, la stringa pi@`u corta @`e minore di quella pi@`u lunga. Cos@`{@dotless{i}}, @code{"abc"} @`e minore di @code{"abcd"}. -@cindex risoluzione di problemi, operatore @code{==} -@cindex problemi, risoluzione di, operatore @code{==} +@cindex risoluzione di problemi @subentry operatore @code{==} +@cindex problemi @subentry risoluzione di @subentry operatore @code{==} @`E molto facile sbagliarsi scrivendo l'operatore @samp{==} e omettendo uno dei due caratteri @samp{=}. Il risultato @`e sempre un codice @command{awk} valido, ma il programma non fa quel che si voleva: @@ -13520,12 +13626,12 @@ $ @kbd{echo 1e2 3 | awk '@{ print ($1 < $2) ? "vero" : "falso" @}'} @print{} falso @end example -@cindex espressioni di confronto, stringa vs.@: @dfn{regexp} +@cindex espressioni @subentry di confronto @subentry stringa vs.@: @dfn{regexp} @c @cindex string comparison vs.@: regexp comparison @c @cindex regexp comparison vs.@: string comparison @noindent il risultato @`e @samp{falso} perch@'e sia @code{$1} che @code{$2} -sono immessi dall'utente. Sono stringhe numeriche---quindi hanno entrambe +sono immessi dall'utente. Sono stringhe numeriche --- quindi hanno entrambe l'attributo @dfn{strnum}, che richiede un confronto di tipo numerico. Lo scopo delle regole di confronto e dell'uso di stringhe numeriche @`e quello di cercare di produrre il comportamento "meno inaspettato possibile", @@ -13550,19 +13656,19 @@ x ~ /att/ ha il valore uno se @code{x} contiene @samp{att}, come @code{"Oh, che matto che sono!"}. -@cindex @code{~} (tilde), operatore @code{~} -@cindex tilde (@code{~}), operatore @code{~} -@cindex @code{!} (punto esclamativo), operatore @code{!~} -@cindex punto esclamativo (@code{!}), operatore @code{!~} +@cindex @code{~} (tilde) @subentry operatore @code{~} +@cindex tilde (@code{~}) @subentry operatore @code{~} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!~} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!~} L'operando di destra degli operatori @samp{~} e @samp{!~} pu@`o essere sia una costante @dfn{regexp} (@code{/}@dots{}@code{/}) che un'espressione ordinaria. In quest'ultimo caso, il valore dell'espressione come stringa @`e usato come una @dfn{regexp} dinamica (@pxref{Uso di @dfn{regexp}}; e @pxref{Espressioni regolari calcolate}). -@cindex @command{awk}, costanti @dfn{regexp} e -@cindex costanti @dfn{regexp} -@cindex @dfn{regexp}, costanti +@cindex @command{awk} @subentry costanti @dfn{regexp} e +@cindex costanti @subentry @dfn{regexp} +@cindex @dfn{regexp} @subentry costanti Un'espressione regolare costante tra due barre @`e di per s@'e anche un'espressione. @code{/@var{regexp}/} @`e un'abbreviazione per la seguente espressione di confronto: @@ -13589,6 +13695,7 @@ diverso dal risultato ottenuto quando si esegue un confronto rigorosamente dovrebbe funzionare come se le stringhe fossero confrontate usando la funzione @code{strcoll()} di C.} +@cindex modalit@`a POSIX Poich@'e questo comportamento differisce sensibilmente dalla pratica corrente, @command{gawk} lo implementava solo quando eseguito in modalit@`a POSIX (@pxref{Opzioni}). @@ -13623,6 +13730,7 @@ a <= b && a >= b @end example @end quotation +@cindex modalit@`a POSIX A partire dalla @value{PVERSION} 4.2, @command{gawk} continua a usare l'ordine di collazione locale per @code{<}, @code{<=}, @code{>} e @code{>=} solo se eseguito nella modalit@`a POSIX. @@ -13634,15 +13742,15 @@ and http://austingroupbugs.net/view.php?id=1070. @node Operatori booleani @subsection Espressioni booleane -@cindex @dfn{and}, operatore logico-booleano -@cindex @dfn{or}, operatore logico-booleano -@cindex @dfn{not}, operatore logico-booleano -@cindex espressioni booleane -@cindex booleane, espressioni -@cindex operatori booleani, si veda espressioni booleane -@cindex booleani, operatori, si veda espressioni booleane -@cindex logici, operatori, si veda espressioni booleane -@cindex operatori logici, si veda espressioni booleane +@cindex @dfn{and} (operatore logico-booleano) +@cindex @dfn{or} (operatore logico-booleano) +@cindex @dfn{not} (operatore logico-booleano) +@cindex espressioni @subentry booleane +@cindex booleane @subentry espressioni +@cindex operatori @subentry booleani @seeentry{espressioni booleane} +@cindex booleani @subentry operatori @seeentry{espressioni booleane} +@cindex logico @subentry operatore @seeentry{ espressioni booleane} +@cindex operatori @subentry logici @seeentry{espressioni booleane} Un'@dfn{espressione booleana} @`e una combinazione di espressioni di confronto o espressioni di ricerca, che usa gli operatori booleani "or" @@ -13674,7 +13782,7 @@ sia @samp{edu} che @samp{li}: if ($0 ~ /edu/ && $0 ~ /li/) print @end example -@cindex effetti collaterali, operatori booleani +@cindex effetti collaterali @subentry operatori booleani La sottoespressione @var{booleano2} viene valutata solo se @var{booleano1} @`e vero. Questo pu@`o comportare una differenza laddove @var{booleano2} contenga espressioni che hanno effetti collaterali. Nel caso di @samp{$0 ~ /pippo/ && @@ -13713,12 +13821,12 @@ BEGIN @{ if (! ("HOME" in ENVIRON)) @ref{Visitare elementi}.) @end table -@cindex cortocircuito, operatori -@cindex operatori di cortocircuito -@cindex @code{&} (e commerciale), operatore @code{&&} -@cindex e commerciale (@code{&}), operatore @code{&&} -@cindex @code{|} (barra verticale), operatore @code{||} -@cindex barra verticale (@code{|}), operatore @code{||} +@cindex cortocircuito @subentry operatori +@cindex operatori @subentry di cortocircuito +@cindex @code{&} (e commerciale) @subentry operatore @code{&&} +@cindex e commerciale (@code{&}) @subentry operatore @code{&&} +@cindex @code{|} (barra verticale) @subentry operatore @code{||} +@cindex barra verticale (@code{|}) @subentry operatore @code{||} Gli operatori @samp{&&} e @samp{||} sono chiamati operatori di @dfn{cortocircuito} per il modo in cui funzionano. La valutazione dell'intera espressione @`e "cortocircuitata" se il risultato pu@`o gi@`a essere determinato @@ -13730,11 +13838,11 @@ semplicemente mettendo un ritorno a capo dopo di esse. Per@`o non si pu@`o mett un ritorno a capo @emph{prima} di questi operatori senza usare la continuazione tramite la barra inversa (@pxref{Istruzioni/Righe}). -@cindex @code{!} (punto esclamativo), operatore @code{!} -@cindex punto esclamativo (@code{!}), operatore @code{!} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!} @cindex ritorno a capo -@cindex variabili di tipo indicatore [@dfn{flag}] -@cindex @dfn{flag} [indicatore], variabili +@cindex variabili @subentry di tipo indicatore (@dfn{flag}) +@cindex @dfn{flag} (indicatore), variabili di tipo Il valore reale di un'espressione che usa l'operatore @samp{!} @`e uno o zero, a seconda del valore di verit@`a dell'espressione a cui @`e applicato. @@ -13775,7 +13883,7 @@ if (! @var{qualche condizione} || @var{qualche altra condizione}) @{ @} @end example -@cindex @code{next}, istruzione +@cindex @code{next} (istruzione) @quotation NOTA L'istruzione @code{next} viene trattata in @ref{Istruzione next}. @@ -13788,9 +13896,9 @@ Il motivo @`e quello di evitare di stampare le righe delimitatrici @node Espressioni condizionali @subsection Espressioni condizionali -@cindex condizionali, espressioni -@cindex espressioni condizionali -@cindex espressioni, selezionare +@cindex condizionali @subentry espressioni +@cindex espressioni @subentry condizionali +@cindex espressioni @subentry selezionare Un'@dfn{espressione condizionale} @`e un tipo particolare di espressione che ha tre operandi. Consente di usare il primo valore dell'espressione per @@ -13814,7 +13922,7 @@ Per esempio, la seguente espressione produce il valore assoluto di @code{x}: x >= 0 ? x : -x @end example -@cindex effetti collaterali, espressioni condizionali +@cindex effetti collaterali @subentry espressioni condizionali Ogni volta che viene calcolata un'espressione condizionale, solo una delle espressioni @var{espr-se-vero} e @var{espr-se-falso} viene usata; l'altra @`e ignorata. Questo @`e importante quando le espressioni hanno effetti @@ -13838,9 +13946,9 @@ ignorata. @end ifnottex per maggiori informazioni sui vettori. -@cindex differenze tra @command{awk} e @command{gawk}, continuazione di riga -@cindex continuazione di riga, @command{gawk} -@cindex @command{gawk}, continuazione di riga in +@cindex differenze tra @command{awk} e @command{gawk} @subentry continuazione di riga +@cindex continuazione di riga @subentry @command{gawk} +@cindex @command{gawk} @subentry continuazione di riga in Come estensione minore di @command{gawk}, un'istruzione che usa @samp{?:} si pu@`o continuare mettendo semplicemente un ritorno a capo dopo i due caratteri. @@ -13852,14 +13960,14 @@ Se viene specificata l'opzione @option{--posix} @node Chiamate di funzione @section Chiamate di funzione -@cindex chiamata di funzione +@cindex chiamare @subentry funzione Una @dfn{funzione} @`e un nome per richiedere un particolare calcolo. Il nome permette di richiamare la funzione da qualsiasi punto del programma. Per esempio, la funzione @code{sqrt()} calcola la radice quadrata di un numero. -@cindex funzioni predefinite +@cindex funzioni @subentry predefinite Un certo numero di funzioni sono @dfn{predefinite}, ossia sono disponibili in ogni programma @command{awk}. La funzione @code{sqrt()} @`e una di queste. @xref{Funzioni predefinite} per un elenco di funzioni @@ -13870,7 +13978,7 @@ per istruzioni su come farlo. Infine, @command{gawk} permette di scrivere funzioni in C o in C++ che possono essere chiamate dal proprio programma (@pxref{Estensioni dinamiche}). -@cindex argomenti, nelle chiamate di funzione +@cindex argomenti @subentry nelle chiamate di funzione Una funzione viene utilizzata invocandola tramite un'espressione di @dfn{chiamata di funzione}, che consiste nel nome della funzione seguito immediatamente da una lista di @dfn{argomenti} tra parentesi. Gli argomenti @@ -13885,8 +13993,8 @@ atan2(y, x) @ii{due argomenti} rand() @ii{nessun argomento} @end example -@cindex risoluzione di problemi, sintassi della chiamata di funzione -@cindex problemi, risoluzione di, sintassi della chiamata di funzione +@cindex risoluzione di problemi @subentry sintassi della chiamata di funzione +@cindex problemi @subentry risoluzione di @subentry sintassi della chiamata di funzione @quotation ATTENZIONE Non ci dev'essere nessuno spazio tra il nome della funzione e la parentesi aperta! Un nome di funzione definita dall'utente pu@`o essere scambiata per @@ -13925,7 +14033,7 @@ del programma. Si rimanda la trattazione di questa funzionalit@`a a un secondo momento; si veda @ref{Chiamate indirette}. -@cindex effetti collaterali, chiamate di funzione +@cindex effetti collaterali @subentry chiamate di funzione Come ogni altra espressione, la chiamata di funzione ha un valore, chiamato spesso @dfn{valore di ritorno}, che @`e calcolato dalla funzione in base agli argomenti dati. In quest'esempio, il codice di ritorno @@ -13975,7 +14083,7 @@ $ @kbd{awk -f matchit.awk} @node Precedenza @section Precedenza degli operatori (Come si nidificano gli operatori) @cindex precedenza -@cindex operatori, precedenza +@cindex operatori @subentry precedenza La @dfn{precedenza degli operatori} determina come gli operatori vengono raggruppati quando diversi operatori appaiono uno vicino all'altro in @@ -14025,48 +14133,48 @@ dalla pi@`u alta alla pi@`u bassa: @item @code{(}@dots{}@code{)} Raggruppamento. -@cindex @code{$} (dollaro), operatore di campo @code{$} -@cindex dollaro (@code{$}), operatore di campo @code{$} +@cindex @code{$} (dollaro) @subentry operatore di campo @code{$} +@cindex dollaro (@code{$}) @subentry operatore di campo @code{$} @item @code{$} Riferimento a un campo. -@cindex @code{+} (pi@`u), operatore @code{++} -@cindex pi@`u (@code{+}), operatore @code{++} -@cindex @code{-} (meno), operatore @code{--} -@cindex meno (@code{-}), operatore @code{--} +@cindex @code{+} (pi@`u) @subentry operatore @code{++} +@cindex pi@`u (@code{+}) @subentry operatore @code{++} +@cindex @code{-} (meno) @subentry operatore @code{--} +@cindex meno (@code{-}) @subentry operatore @code{--} @item @code{++ --} Incremento, decremento. -@cindex @code{^} (circonflesso), operatore @code{^} -@cindex circonflesso (@code{^}), operatore @code{^} -@cindex @code{*} (asterisco), operatore @code{**} -@cindex asterisco (@code{*}), operatore @code{**} +@cindex @code{^} (circonflesso) @subentry operatore @code{^} +@cindex circonflesso (@code{^}) @subentry operatore @code{^} +@cindex @code{*} (asterisco) @subentry operatore @code{**} +@cindex asterisco (@code{*}) @subentry operatore @code{**} @item @code{^ **} Elevamento a potenza. Questi operatori sono raggruppati da destra verso sinistra. -@cindex @code{+} (pi@`u), operatore @code{+} -@cindex pi@`u (@code{+}), operatore @code{+} -@cindex @code{-} (meno), operatore @code{-} -@cindex meno (@code{-}), operatore @code{-} -@cindex @code{!} (punto esclamativo), operatore @code{!} -@cindex punto esclamativo (@code{!}), operatore @code{!} +@cindex @code{+} (pi@`u) @subentry operatore @code{+} +@cindex pi@`u (@code{+}) @subentry operatore @code{+} +@cindex @code{-} (meno) @subentry operatore @code{-} +@cindex meno (@code{-}) @subentry operatore @code{-} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!} @item @code{+ - !} Pi@`u, meno, ``not'' logico, unari. -@cindex @code{*} (asterisco), operatore @code{*}, come operatore di moltiplicazione -@cindex asterisco (@code{*}), operatore @code{*}, come operatore di moltiplicazione -@cindex @code{/} (barra), operatore @code{/} -@cindex barra (@code{/}), operatore @code{/} -@cindex @code{%} (percento), operatore @code{%} -@cindex percento (@code{%}), operatore @code{%} +@cindex @code{*} (asterisco) @subentry operatore @code{*} @subentry come operatore di moltiplicazione +@cindex asterisco (@code{*}) @subentry operatore @code{*} @subentry come operatore di moltiplicazione +@cindex @code{/} (barra) @subentry operatore @code{/} +@cindex barra (@code{/}) @subentry operatore @code{/} +@cindex @code{%} (percento) @subentry operatore @code{%} +@cindex percento (@code{%}) @subentry operatore @code{%} @item @code{* / %} Moltiplicazione, divisione, resto di una divisione. -@cindex @code{+} (pi@`u), operatore @code{+} -@cindex pi@`u (@code{+}), operatore @code{+} -@cindex @code{-} (meno), operatore @code{-} -@cindex meno (@code{-}), operatore @code{-} +@cindex @code{+} (pi@`u) @subentry operatore @code{+} +@cindex pi@`u (@code{+}) @subentry operatore @code{+} +@cindex @code{-} (meno) @subentry operatore @code{-} +@cindex meno (@code{-}) @subentry operatore @code{-} @item @code{+ -} Addizione, sottrazione. @@ -14075,27 +14183,27 @@ Non c'@`e un simbolo speciale per la concatenazione. Gli operandi sono semplicemente scritti uno accanto all'altro. (@pxref{Concatenazione}). -@cindex @code{<} (parentesi acuta sinistra), operatore @code{<} -@cindex parentesi acuta sinistra (@code{<}), operatore @code{<} -@cindex @code{<} (parentesi acuta sinistra), operatore @code{<=} -@cindex parentesi acuta sinistra (@code{<}), operatore @code{<=} -@cindex @code{>} (parentesi acuta destra), operatore @code{>=} -@cindex parentesi acuta destra (@code{>}), operatore @code{>=} -@cindex @code{>} (parentesi acuta destra), operatore @code{>} -@cindex parentesi acuta destra (@code{>}), operatore @code{>} -@cindex @code{=} (uguale), operatore @code{==} -@cindex uguale (@code{=}), operatore @code{==} -@cindex @code{!} (punto esclamativo), operatore @code{!=} -@cindex punto esclamativo (@code{!}), operatore @code{!=} -@cindex @code{>} (parentesi acuta destra), operatore @code{>>} (I/O) -@cindex parentesi acuta destra (@code{>}), operatore @code{>>} (I/O) -@cindex operatori, input/output -@cindex @code{|} (barra verticale), operatore @code{|} (I/O) -@cindex barra verticale (@code{|}), operatore @code{|} (I/O) -@cindex operatori, input/output -@cindex @code{|} (barra verticale), operatore @code{|&} (I/O) -@cindex barra verticale (@code{|}), operatore @code{|&} (I/O) -@cindex operatori, input/output +@cindex @code{<} (parentesi acuta sinistra) @subentry operatore @code{<} +@cindex parentesi @subentry acuta sinistra (@code{<}) @subentry operatore @code{<} +@cindex @code{<} (parentesi acuta sinistra) @subentry operatore @code{<=} +@cindex parentesi @subentry acuta sinistra (@code{<}) @subentry operatore @code{<=} +@cindex @code{>} (parentesi acuta destra) @subentry operatore @code{>=} +@cindex parentesi @subentry acuta destra (@code{>}) @subentry operatore @code{>=} +@cindex @code{>} (parentesi acuta destra) @subentry operatore @code{>} +@cindex parentesi @subentry acuta destra (@code{>}) @subentry operatore @code{>} +@cindex @code{=} (uguale) @subentry operatore @code{==} +@cindex uguale (@code{=}) @subentry operatore @code{==} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!=} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!=} +@cindex @code{>} (parentesi acuta destra) @subentry operatore @code{>>} (I/O) +@cindex parentesi @subentry acuta destra (@code{>}) @subentry operatore @code{>>} (I/O) +@cindex operatori @subentry input/output +@cindex @code{|} (barra verticale) @subentry operatore @code{|} (I/O) +@cindex barra verticale (@code{|}) @subentry operatore @code{|} (I/O) +@cindex operatori @subentry input/output +@cindex @code{|} (barra verticale) @subentry operatore @code{|&} (I/O) +@cindex barra verticale (@code{|}) @subentry operatore @code{|&} (I/O) +@cindex operatori @subentry input/output @item @code{< <= == != > >= >> | |&} Operatori relazionali e ridirezione. Gli operatori relazionali e le ridirezioni hanno lo stesso livello di @@ -14103,8 +14211,8 @@ precedenza. I caratteri come @samp{>} servono sia come operatori relazionali che come ridirezioni; la distinzione tra i due significati dipende dal contesto. -@cindex istruzione @code{print}, operatori I/O nell' -@cindex istruzione @code{printf}, operatori I/O nell' +@cindex istruzione @subentry @code{print} @subentry operatori I/O in +@cindex istruzione @subentry @code{printf} @subentry operatori I/O in Si noti che gli operatori di ridirezione I/O nelle istruzioni @code{print} e @code{printf} appartengono al livello dell'istruzione, non alle espressioni. La ridirezione non produce un'espressione che potrebbe essere l'operando di un @@ -14114,54 +14222,54 @@ parentesi. Tali combinazioni generano errori di sintassi (p.es., @samp{print pippo > a ? b : c}). Il modo corretto di scrivere quest'istruzione @`e @samp{print pippo > (a ? b : c)}. -@cindex @code{~} (tilde), operatore @code{~} -@cindex tilde (@code{~}), operatore @code{~} -@cindex @code{!} (punto esclamativo), operatore @code{!~} -@cindex punto esclamativo (@code{!}), operatore @code{!~} +@cindex @code{~} (tilde) @subentry operatore @code{~} +@cindex tilde (@code{~}) @subentry operatore @code{~} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!~} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!~} @item @code{~ !~} Corrispondenza, non corrispondenza. -@cindex @code{in}, operatore +@cindex @code{in} (operatore) @item @code{in} Appartenenza a un vettore. -@cindex @code{&} (e commerciale), operatore @code{&&} -@cindex e commerciale (@code{&}), operatore @code{&&} +@cindex @code{&} (e commerciale) @subentry operatore @code{&&} +@cindex e commerciale (@code{&}) @subentry operatore @code{&&} @item @code{&&} ``and'' logico. -@cindex @code{|} (barra verticale), operatore @code{||} -@cindex barra verticale (@code{|}), operatore @code{||} +@cindex @code{|} (barra verticale) @subentry operatore @code{||} +@cindex barra verticale (@code{|}) @subentry operatore @code{||} @item @code{||} ``or'' logico. -@cindex @code{?} (punto interrogativo), operatore @code{?:} -@cindex punto interrogativo (@code{?}), operatore @code{?:} -@cindex @code{:} (due punti), operatore @code{?:} -@cindex due punti (@code{:}), operatore @code{?:} +@cindex @code{?} (punto interrogativo) @subentry operatore @code{?:} +@cindex punto interrogativo (@code{?}) @subentry operatore @code{?:} +@cindex @code{:} (due punti) @subentry operatore @code{?:} +@cindex due punti (@code{:}) @subentry operatore @code{?:} @item @code{?:} Operatore condizionale. Questo operatore raggruppa da destra verso sinistra. -@cindex @code{+} (pi@`u), operatore @code{+=} -@cindex pi@`u (@code{+}), operatore @code{+=} -@cindex @code{-} (meno), operatore @code{-=} -@cindex meno (@code{-}), operatore @code{-=} -@cindex @code{*} (asterisco), operatore @code{*=} -@cindex asterisco (@code{*}), operatore @code{*=} -@cindex @code{*} (asterisco), operatore @code{**=} -@cindex asterisco (@code{*}), operatore @code{**=} -@cindex @code{/} (barra), operatore @code{/=} -@cindex barra (@code{/}), operatore @code{/=} -@cindex @code{%} (percento), operatore @code{%=} -@cindex percento (@code{%}), operatore @code{%=} -@cindex @code{^} (circonflesso), operatore @code{^=} -@cindex circonflesso (@code{^}), operatore @code{^=} +@cindex @code{+} (pi@`u) @subentry operatore @code{+=} +@cindex pi@`u (@code{+}) @subentry operatore @code{+=} +@cindex @code{-} (meno) @subentry operatore @code{-=} +@cindex meno (@code{-}) @subentry operatore @code{-=} +@cindex @code{*} (asterisco) @subentry operatore @code{*=} +@cindex asterisco (@code{*}) @subentry operatore @code{*=} +@cindex @code{*} (asterisco) @subentry operatore @code{**=} +@cindex asterisco (@code{*}) @subentry operatore @code{**=} +@cindex @code{/} (barra) @subentry operatore @code{/=} +@cindex barra (@code{/}) @subentry operatore @code{/=} +@cindex @code{%} (percento) @subentry operatore @code{%=} +@cindex percento (@code{%}) @subentry operatore @code{%=} +@cindex @code{^} (circonflesso) @subentry operatore @code{^=} +@cindex circonflesso (@code{^}) @subentry operatore @code{^=} @item @code{= += -= *= /= %= ^= **=} Assegnamento. Questi operatori raggruppano da destra verso sinistra. @end table -@cindex POSIX @command{awk}, @code{**} e -@cindex portabilit@`a, operatori, non in POSIX @command{awk} +@cindex POSIX @command{awk} @subentry @code{**} (operatore) +@cindex portabilit@`a @subentry operatori @subentry non in POSIX @command{awk} @quotation NOTA Gli operatori @samp{|&}, @samp{**} e @samp{**=} non sono definiti da POSIX. Per la massima portabilit@`a, @`e meglio non usarli. @@ -14169,7 +14277,7 @@ Per la massima portabilit@`a, @`e meglio non usarli. @node Localizzazioni @section Il luogo fa la differenza -@cindex localizzazione, definizione di +@cindex localizzazione @subentry definizione di I moderni sistemi prevedono la nozione di @dfn{localizzazione}: un modo per informare il sistema sulla serie di caratteri e sulla lingua locali. @@ -14280,8 +14388,8 @@ La localizzazione pu@`o influire sul formato dei dati in uscita da un programma @node Criteri di ricerca e azioni @chapter Criteri di ricerca, azioni e variabili @cindex criteri di ricerca -@cindex @dfn{pattern}, si veda criteri di ricerca -@cindex espressione di ricerca +@cindex @dfn{pattern} @seeentry{criteri di ricerca} +@cindex espressioni @subentry di ricerca Come gi@`a visto, ogni istruzione @command{awk} consiste di un criterio di ricerca [@dfn{pattern}] a cui @`e associata un'azione. Questo @value{CHAPTER} @@ -14323,7 +14431,7 @@ costruire qualcosa di utile. corrisponde a ogni record. @end menu -@cindex criteri di ricerca, tipi di +@cindex criteri di ricerca @subentry tipi di I criteri di ricerca in @command{awk} controllano l'esecuzione di azioni: un'azione viene eseguita quando il criterio di ricerca associato ad essa @`e soddisfatto dal @@ -14373,8 +14481,8 @@ Il criterio di ricerca vuoto corrisponde a ciascun record in input. @node @dfn{regexp} come criteri di ricerca @subsection Espressioni regolari come criteri di ricerca -@cindex criteri di ricerca, espressioni regolari come -@cindex espressioni regolari, come criteri di ricerca +@cindex criteri di ricerca @subentry espressioni regolari come +@cindex espressioni regolari @subentry come criteri di ricerca Le espressioni regolari sono uno dei primi tipi di criteri di ricerca presentati in questo @value{DOCUMENT}. @@ -14392,8 +14500,8 @@ END @{ print personaggi_Disney, "Personaggi Disney visti" @} @node Espressioni come criteri di ricerca @subsection Espressioni come criteri di ricerca -@cindex espressioni regolari, come criteri di ricerca -@cindex criteri di ricerca, espressioni regolari come +@cindex espressioni regolari @subentry come criteri di ricerca +@cindex criteri di ricerca @subentry espressioni regolari come Qualsiasi espressione @command{awk} pu@`o essere usata come un criterio di ricerca @command{awk}. @@ -14405,8 +14513,8 @@ valore dipende direttamente dal contenuto del record in input appena letto; altrimenti, dipende solo da quel che @`e accaduto fino a quel momento durante l'esecuzione del programma @command{awk}. -@cindex espressioni di confronto, come criteri di ricerca -@cindex criteri di ricerca, espressioni di confronto come +@cindex espressioni @subentry di confronto @subentry come criteri di ricerca +@cindex criteri di ricerca @subentry espressioni di confronto come Le espressioni di confronto, che usano gli operatori di confronto descritti in @ref{Tipi di variabile e confronti}, sono un tipo di criterio di ricerca usato frequentemente. @@ -14419,12 +14527,12 @@ stringa @`e usato come un'espressione regolare dinamica L'esempio seguente stampa il secondo campo di ogni record in input il cui primo campo sia esattamente @samp{li}: -@cindex @code{/} (barra), criteri di ricerca e -@cindex barra (@code{/}), criteri di ricerca e -@cindex @code{~} (tilde), operatore @code{~} -@cindex tilde (@code{~}), operatore @code{~} -@cindex @code{!} (punto esclamativo), operatore @code{!~} -@cindex punto esclamativo (@code{!}), operatore @code{!~} +@cindex @code{/} (barra) @subentry criteri di ricerca e +@cindex barra (@code{/}) @subentry criteri di ricerca e +@cindex @code{~} (tilde) @subentry operatore @code{~} +@cindex tilde (@code{~}) @subentry operatore @code{~} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!~} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!~} @example $ @kbd{awk '$1 == "li" @{ print $2 @}' mail-list} @end example @@ -14440,16 +14548,16 @@ $ @kbd{awk '$1 ~ /li/ @{ print $2 @}' mail-list} @print{} 555-6699 @end example -@cindex @dfn{regexp}, costanti, come criteri di ricerca -@cindex criteri di ricerca, costanti @dfn{regexp} come +@cindex @dfn{regexp} @subentry costanti @subentry come criteri di ricerca +@cindex criteri di ricerca @subentry costanti @dfn{regexp} come Una costante @dfn{regexp} usata come criterio di ricerca @`e anche un caso speciale di criterio di ricerca costituito da un'espressione. All'espressione @code{/li/} viene assegnato il valore uno se @samp{li} viene trovato nel record in input corrente. Quindi, come criterio di ricerca, @code{/li/} individua tutti i record che contengono la stringa @samp{li}. -@cindex espressioni booleane, come criteri di ricerca -@cindex criteri di ricerca, espressioni booleane come +@cindex espressioni @subentry booleane @subentry come criteri di ricerca +@cindex criteri di ricerca @subentry espressioni booleane come Anche le espressioni booleane sono frequentemente usate come criteri di ricerca. Se un criterio di ricerca individua o no un record in input dipende dalla verifica delle @@ -14492,10 +14600,10 @@ $ @kbd{awk '! /li/' mail-list} @end group @end example -@cindex @code{BEGIN}, criterio di ricerca, criteri di ricerca booleani e -@cindex @code{END}, criterio di ricerca, criteri di ricerca booleani e -@cindex @code{BEGINFILE}, criterio di ricerca, criteri di ricerca booleani e -@cindex @code{ENDFILE}, criterio di ricerca, criteri di ricerca booleani e +@cindex @code{BEGIN} (regola) @subentry criteri di ricerca booleani e +@cindex @code{END} (regola) @subentry criteri di ricerca booleani e +@cindex @code{BEGINFILE} (regola) @subentry criteri di ricerca booleani e +@cindex @code{ENDFILE} (regola) @subentry criteri di ricerca booleani e Le sottoespressioni di un'operatore booleano in un criterio di ricerca possono essere espressioni regolari costanti, confronti, o qualsiasi altra espressione di @command{awk}. Gli intervalli di ricerca @@ -14512,8 +14620,8 @@ criteri di ricerca @`e descritto in @ref{Precedenza}. @subsection Specificare intervalli di record con i criteri di ricerca @cindex intervalli di ricerca -@cindex criteri di ricerca, intervalli nei -@cindex righe, individuare intervalli di +@cindex criteri di ricerca @subentry intervalli nei +@cindex righe @subentry individuare intervalli di @cindex @code{,} (virgola), negli intervalli di ricerca @cindex virgola (@code{,}), negli intervalli di ricerca Un @dfn{intervallo di ricerca} @`e composto da due criteri di ricerca @@ -14545,7 +14653,7 @@ criterio di ricerca viene @dfn{disattivato} a partire dal record seguente. Quindi il criterio di ricerca torna a controllare @var{inizio_intervallo} per ogni nuovo record. -@cindex @code{if}, istruzione, azioni@comma{} modificabili +@cindex @code{if} (istruzione) @subentry azioni, modificabili Il record che segnala l'inizio dell'intervallo di ricerca e quello che segnala la fine di quell'intervallo soddisfano @emph{entrambi} il criterio di ricerca. Se non si vuole agire su tali record @@ -14572,15 +14680,15 @@ Un tale programma @`e simile a questo: @end example @noindent -@cindex righe, saltare tra delimitatori +@cindex righe @subentry saltare tra delimitatori @c @cindex @dfn{flag} variables Questo programma non funziona, perch@'e l'intervallo di ricerca @`e sia attivato che disattivato dalla prima riga incontrata, quella costituita da un @samp{%}. Per ottenere l'effetto desiderato, si scriva il programma nella maniera che segue, utilizzando un @dfn{flag}: -@cindex @code{!} (punto esclamativo), operatore @code{!} -@cindex punto esclamativo (@code{!}), operatore @code{!} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!} @example /^%$/ @{ ignora = ! ignora; next @} ignora == 1 @{ next @} # ignora righe quando `ignora' @`e impostato a 1 @@ -14608,17 +14716,17 @@ $ @kbd{echo Yes | gawk '(/1/,/2/) || /Yes/'} @error{} gawk: riga com.:1: ^ syntax error @end example -@cindex intervalli di ricerca, continuazione di riga e -@cindex angolo buio, intervalli di ricerca, continuazione di riga e +@cindex intervalli di ricerca @subentry continuazione di riga e +@cindex angolo buio @subentry intervalli di ricerca @subentry continuazione di riga e Come punto di secondaria importanza, nonostante sia stilisticamente poco elegante, lo standard POSIX consente di andare a capo dopo la virgola in un intervallo di ricerca. @value{DARKCORNER} @node BEGIN/END @subsection I criteri di ricerca speciali @code{BEGIN} ed @code{END} -@cindex @code{BEGIN}, criterio di ricerca -@cindex @code{END}, criterio di ricerca -@cindex criterio di ricerca @code{END} +@cindex @code{BEGIN} (regola) +@cindex @code{END} (regola) +@cindex regola @subentry @code{END} Tutti i criteri di ricerca fin qui descritti servono a individuare dei record in input. I criteri di ricerca speciali @code{BEGIN} ed @code{END} non hanno questo scopo. @@ -14639,10 +14747,10 @@ da molto tempo. @node Usare BEGIN/END @subsubsection Azioni di inizializzazione e pulizia -@cindex @code{BEGIN}, criterio di ricerca -@cindex criterio di ricerca @code{BEGIN} -@cindex @code{END}, criterio di ricerca -@cindex criterio di ricerca @code{END} +@cindex @code{BEGIN} (regola) +@cindex regola @subentry @code{BEGIN} +@cindex @code{END} (regola) +@cindex regola @subentry @code{END} Una regola @code{BEGIN} @`e eseguita solo una volta, prima che sia letto il primo record in input. Analogamente, una regola @code{END} @`e eseguita solo una volta, dopo che tutto l'input @`e gi@`a stato letto. Per esempio: @@ -14656,9 +14764,9 @@ $ @kbd{awk '} @print{} "li" @`e presente in 4 record. @end example -@cindex @code{BEGIN}, criterio di ricerca, operatori e -@cindex @code{END}, criterio di ricerca, operatori e -@cindex criterio di ricerca @code{END}, operatori e +@cindex @code{BEGIN} (regola) @subentry operatori e +@cindex @code{END} (regola) @subentry operatori e +@cindex regola @subentry @code{END} @subentry operatori e Questo programma trova il numero di record nel file in input @file{mail-list} che contengono la stringa @samp{li}. La regola @code{BEGIN} stampa un titolo per il rapporto. Non c'@`e bisogno di usare la regola @@ -14716,7 +14824,7 @@ la regola @code{END} faccia uso delle variabili @code{FNR} e @code{NR}. @node I/O e BEGIN/END @subsubsection Input/Output dalle regole @code{BEGIN} ed @code{END} -@cindex input/output, dalle regole @code{BEGIN} ed @code{END} +@cindex input/output @subentry dalle regole @code{BEGIN} ed @code{END} Ci sono parecchi punti (talora insidiosi) da tener presente se si fa dell'I/O all'interno di una regola @code{BEGIN} o @code{END}. Il primo ha a che fare con il valore di @code{$0} in una regola @code{BEGIN}. @@ -14728,12 +14836,12 @@ Un modo per assegnare un valore effettivo a @code{$0} @`e di eseguire un comando @code{getline} senza indicare una variabile (@pxref{Getline}). Un altro modo @`e semplicemente quello di assegnare un valore a @code{$0}. -@cindex Brian Kernighan, @command{awk} di -@cindex differenze tra @command{awk} e @command{gawk}, criteri di ricerca @code{BEGIN}/@code{END} -@cindex POSIX @command{awk}, criteri di ricerca @code{BEGIN}/@code{END} -@cindex @code{print}, istruzione, criteri di ricerca @code{BEGIN}/@code{END} e -@cindex @code{BEGIN}, criterio di ricerca, istruzione @code{print} e -@cindex @code{END}, criterio di ricerca, istruzione @code{print} e +@cindex Brian Kernighan @subentry @command{awk} di +@cindex differenze tra @command{awk} e @command{gawk} @subentry criteri di ricerca @code{BEGIN}/@code{END} +@cindex POSIX @command{awk} @subentry criteri di ricerca @code{BEGIN}/@code{END} +@cindex @code{print} (istruzione) @subentry criteri di ricerca @code{BEGIN}/@code{END} e +@cindex @code{BEGIN} (regola) @subentry istruzione @code{print} e +@cindex @code{END} (regola) @subentry istruzione @code{print} e Il secondo punto @`e simile al primo, ma in direzione opposta. Tradizionalmente, pi@`u che altro per problemi di implementazione, @code{$0} e @code{NF} erano @emph{indefiniti} all'interno di una regola @code{END}. @@ -14760,10 +14868,10 @@ almeno in @command{gawk}. @`E anche stilisticamente inelegante, perch@'e se serve una riga vuota in output, il programma dovrebbe stamparne una esplicitamente. -@cindex @code{next}, istruzione, criteri di ricerca @code{BEGIN}/@code{END} e -@cindex @code{nextfile}, istruzione, criteri di ricerca @code{BEGIN}/@code{END} e -@cindex @code{BEGIN}, criterio di ricerca, istruzioni @code{next}/@code{nextfile} e -@cindex @code{END}, criterio di ricerca, istruzioni @code{next}/@code{nextfile} e +@cindex @code{next} (istruzione) @subentry criteri di ricerca @code{BEGIN}/@code{END} e +@cindex @code{nextfile} (istruzione) @subentry criteri di ricerca @code{BEGIN}/@code{END} e +@cindex @code{BEGIN} (regola) @subentry istruzioni @code{next}/@code{nextfile} e +@cindex @code{END} (regola) @subentry istruzioni @code{next}/@code{nextfile} e Per finire, le istruzioni @code{next} e @code{nextfile} non sono consentite all'interno di una regola @code{BEGIN}, perch@'e il ciclo implicito leggi-un-record-e-confrontalo-con-le-regole non @`e ancora iniziato. @@ -14779,9 +14887,9 @@ Analogamente, tali istruzioni non sono valide all'interno di una regola @node BEGINFILE/ENDFILE @subsection I criteri di ricerca speciali @code{BEGINFILE} ed @code{ENDFILE} -@cindex @code{BEGINFILE}, criterio di ricerca -@cindex @code{ENDFILE}, criterio di ricerca -@cindex differenze tra @command{awk} e @command{gawk}, criteri di ricerca @code{BEGINFILE}/@code{ENDFILE} +@cindex @code{BEGINFILE} (regola) +@cindex @code{ENDFILE} (regola) +@cindex differenze tra @command{awk} e @command{gawk} @subentry criteri di ricerca @code{BEGINFILE}/@code{ENDFILE} @ifnotinfo Questa @@ -14826,9 +14934,9 @@ nella riga dei comandi non pu@`o essere aperto in lettura, il programma @command{gawk} viene terminato. Comunque, questo si pu@`o evitare, per poi passare a elaborare il file successivo specificato sulla riga dei comandi. -@cindex @command{gawk}, variabile @code{ERRNO} in -@cindex @code{ERRNO}, variabile, con criterio di ricerca @code{BEGINFILE} -@cindex @code{nextfile}, istruzione, criteri di ricerca @code{BEGINFILE}/@code{ENDFILE} e +@cindex @command{gawk} @subentry variabile @subentry @code{ERRNO} in +@cindex @code{ERRNO} (variabile) @subentry con criterio di ricerca @code{BEGINFILE} +@cindex @code{nextfile} (istruzione) @subentry criteri di ricerca @code{BEGINFILE}/@code{ENDFILE} e Questo controllo @`e fattibile controllando se la variabile @code{ERRNO} @`e diversa dalla stringa nulla; se @`e questo il caso, @command{gawk} non @`e riuscito ad aprire il file. In questo caso il programma pu@`o eseguire @@ -14859,13 +14967,13 @@ una regola @code{ENDFILE}, l'errore non @`e considerato fatale, ma viene impostato @code{ERRNO}. Ci@`o permette di intercettare ed elaborare errori di I/O a livello di programma @command{awk}. -@cindex @code{next}, istruzione, criteri di ricerca @code{BEGINFILE}/@code{ENDFILE} e +@cindex @code{next} (istruzione) @subentry criteri di ricerca @code{BEGINFILE}/@code{ENDFILE} e L'istruzione @code{next} (@pxref{Istruzione next}) non @`e permessa all'interno di una regola @code{BEGINFILE} o @code{ENDFILE}. L'istruzione @code{nextfile} @`e consentita solo all'interno di una regola @code{BEGINFILE}, non all'interno di una regola @code{ENDFILE}. -@cindex @code{getline}, comando, criteri di ricerca @code{BEGINFILE}/@code{ENDFILE} e +@cindex @code{getline} (comando) @subentry criteri di ricerca @code{BEGINFILE}/@code{ENDFILE} e L'istruzione @code{getline} (@pxref{Getline}) @`e limitata all'interno sia di @code{BEGINFILE} che di @code{ENDFILE}: solo le forme ridirette di di @code{getline} sono permesse. @@ -14899,8 +15007,8 @@ rule to grab it before moving on to the next file.] @node Vuoto @subsection Il criterio di ricerca vuoto -@cindex vuoto, criterio di ricerca -@cindex criteri di ricerca vuoti +@cindex vuoto @subentry criterio di ricerca +@cindex criteri di ricerca @subentry vuoti Un criterio di ricerca vuoto (cio@`e omesso) corrisponde a @emph{ogni} record in input. Per esempio, il programma: @@ -14913,8 +15021,8 @@ stampa il primo campo di ogni record. @node Usare variabili di shell @section Usare variabili di shell in programmi -@cindex shell, variabili di -@cindex programmi @command{awk}, variabili di shell in +@cindex shell @subentry variabili di +@cindex programmi @command{awk} @subentry variabili di shell nei @c @cindex shell and @command{awk} interaction I programmi @command{awk} sono spesso usati come componenti di programmi pi@`u @@ -14925,7 +15033,7 @@ individuare. Ci sono due modi per rendere disponibile il valore di una variabile di shell all'interno di un programma @command{awk}. -@cindex shell, uso di doppio apice +@cindex shell @subentry uso di doppio apice Un modo comune @`e quello di usare i doppi apici per sostituire il valore della variabile nel progamma @command{awk} contenuto nello @dfn{script}: @@ -14978,8 +15086,8 @@ La variabile @command{awk} @code{crit} potrebbe avere come nome anche @code{criterio_di_ricerca}, ma ci@`o potrebbe essere causa di confusione. Usare una variabile permette una maggiore flessibilit@`a, poich@'e la variabile pu@`o essere usata in ogni parte del -programma---per stamparla, per indicizzare un vettore, o per qualsiasi altro -scopo---senza che sia necessario l'artificio di doverla inserire usando gli +programma --- per stamparla, per indicizzare un vettore, o per qualsiasi altro +scopo --- senza che sia necessario l'artificio di doverla inserire usando gli apici. @node Panoramica sulle azioni @@ -15007,12 +15115,12 @@ con il criterio di ricerca. Quindi, schematicamente, un programma @dots{} @end display -@cindex @code{@{@}} (parentesi graffe), azioni e -@cindex parentesi graffe (@code{@{@}}), azioni e -@cindex separatori, per istruzioni in azioni -@cindex a capo, separatore di istruzioni nelle azioni -@cindex @code{;} (punto e virgola), separare istruzioni nelle azioni -@cindex punto e virgola (@code{;}), separare istruzioni nelle azioni +@cindex @code{@{@}} (parentesi graffe) @subentry azioni e +@cindex parentesi @subentry graffe (@code{@{@}}) @subentry azioni e +@cindex separatore di istruzioni @subentry nelle azioni +@cindex ritorno a capo @subentry separatore di istruzioni nelle azioni +@cindex @code{;} (punto e virgola) @subentry separare istruzioni nelle azioni +@cindex punto e virgola (@code{;}) @subentry separare istruzioni nelle azioni Un'azione consiste di una o pi@`u @dfn{istruzioni} @command{awk}, racchiuse fra parentesi graffe (@samp{@{@r{@dots{}}@}}). Ogni istruzione specifica una cosa da fare. Le istruzioni sono separate tra loro da dei ritorni a capo o @@ -15031,8 +15139,8 @@ parentesi graffe. Un'azione omessa equivale a specificare I seguenti tipi di istruzione sono disponibili in @command{awk}: @table @asis -@cindex effetti collaterali delle istruzioni -@cindex istruzioni, effetti collaterali delle +@cindex effetti collaterali @subentry delle istruzioni +@cindex istruzioni @subentry effetti collaterali delle @item Espressioni Servono per chiamare funzioni o assegnare valori a variabili @iftex @@ -15082,21 +15190,21 @@ Per eliminare elementi di vettori. @node Istruzioni @section Istruzioni di controllo nelle azioni @cindex istruzioni di controllo -@cindex controllo, tramite istruzioni, in azioni -@cindex azioni, istruzioni di controllo in +@cindex controllo @subentry tramite istruzioni @subentry in azioni +@cindex azioni @subentry istruzioni di controllo in Le @dfn{istruzioni di controllo}, come @code{if}, @code{while} e cos@`{@dotless{i}} via, regolano il flusso di esecuzione nei programmi @command{awk}. Molte tra le istruzioni di controllo di @command{awk} sono modellate sulle corrispondenti istruzioni in C. -@cindex istruzioni composte@comma{} istruzioni di controllo e -@cindex composte, istruzioni@comma{} istruzioni di controllo e -@cindex corpo, nelle azioni -@cindex @code{@{@}} (parentesi graffe), istruzioni, raggruppare -@cindex parentesi graffe (@code{@{@}}), istruzioni, raggruppare -@cindex a capo, separatore di istruzioni nelle azioni -@cindex @code{;} (punto e virgola), separare istruzioni nelle azioni -@cindex punto e virgola (@code{;}), separare istruzioni nelle azioni +@cindex istruzioni composte @subentry istruzioni di controllo e +@cindex composte @subentry istruzioni @subentry istruzioni di controllo e +@cindex corpo @subentry nelle azioni +@cindex @code{@{@}} (parentesi graffe) @subentry istruzioni, raggruppare +@cindex parentesi @subentry graffe (@code{@{@}}) @subentry istruzioni, raggruppare +@cindex ritorno a capo @subentry separatore di istruzioni nelle azioni +@cindex @code{;} (punto e virgola) @subentry separare istruzioni nelle azioni +@cindex punto e virgola (@code{;}) @subentry separare istruzioni nelle azioni Tutte le istruzioni di controllo iniziano con parole chiave speciali, come @code{if} e @code{while}, per distinguerle dalle semplici espressioni. Molte istruzioni di controllo contengono altre istruzioni. Per esempio, @@ -15132,8 +15240,8 @@ loro con dei ritorni a capo o dei punti e virgola. @node Istruzione if @subsection L'istruzione @code{if}-@code{else} -@cindex istruzione @code{if} -@cindex @code{if}, istruzione +@cindex istruzione @subentry @code{if} +@cindex @code{if} (istruzione) L'istruzione @code{if}-@code{else} @`e quella che serve in @command{awk} per prendere decisioni. @`E simile a questa: @@ -15184,11 +15292,11 @@ questo modo, perch@'e a chi li legge potrebbe sfuggire la parola chiave @node Istruzione while @subsection L'istruzione @code{while} -@cindex @code{while}, istruzione -@cindex istruzione @code{while} +@cindex @code{while} (istruzione) +@cindex istruzione @subentry @code{while} @cindex cicli -@cindex cicli, @code{while} -@cindex cicli, si veda anche @code{while}, istruzione +@cindex cicli @subentry @code{while} +@cindex cicli @seealso{@code{while} (istruzione)} Nella programmazione, un @dfn{ciclo} @`e una parte di un programma che pu@`o essere eseguita due o pi@`u volte consecutivamente. @@ -15201,7 +15309,7 @@ while (@var{condizione}) @var{corpo-del-ciclo} @end example -@cindex corpo, nei cicli +@cindex corpo @subentry nei cicli @noindent @var{corpo-del-ciclo} @`e un'istruzione detta @dfn{corpo} del ciclo, e @var{condizione} @`e un'espressione che controlla per quante volte il ciclo @@ -15256,8 +15364,8 @@ programma @`e di lettura pi@`u difficile se lo si omette. @node Istruzione do @subsection L'istruzione @code{do}-@code{while} -@cindex @code{do}-@code{while} -@cindex cicli, @code{do}-@code{while} +@cindex @code{do}-@code{while} (istruzione) +@cindex cicli @subentry @code{do}-@code{while} Il ciclo @code{do} @`e una variazione dell'istruzione di ciclo @code{while}. Il ciclo @code{do} esegue il @var{corpo-del-ciclo} una volta e poi ripete il @@ -15302,9 +15410,9 @@ reale; solo occasionalmente @`e davvero necessario usare un @code{do}. @node Istruzione for @subsection L'istruzione @code{for} -@cindex istruzione @code{for} -@cindex @code{for}, istruzione -@cindex cicli, @code{for}, iterativi +@cindex istruzione @subentry @code{for} +@cindex @code{for} (istruzione) +@cindex cicli @subentry @code{for} @subentry iterativi L'istruzione @code{for} rende pi@`u agevole contare le iterazioni di un ciclo. La forma generale dell'istruzione @code{for} @`e simile a questa: @@ -15384,7 +15492,7 @@ while (@var{condizione}) @{ @} @end example -@cindex cicli, istruzione @code{continue} e +@cindex cicli @subentry istruzione @code{continue} e @noindent La sola eccezione @`e quando l'istruzione @code{continue} (@pxref{Istruzione continue}) @`e usata @@ -15400,8 +15508,8 @@ Contare il numero di iterazioni @`e molto frequente nei cicli. Pu@`o essere pi@`u facile pensare a questo conto come parte del ciclo, piuttosto che come qualcosa da fare all'interno del ciclo. -@cindex @code{in}, operatore -@cindex operatore @code{in} +@cindex @code{in} (operatore) +@cindex operatore @subentry @code{in} Esiste una versione alternativa al ciclo @code{for}, per esaminare tutti gli indici di un vettore: @@ -15416,11 +15524,13 @@ per maggiori informazioni su questa versione del ciclo @code{for}. @node Istruzione switch @subsection L'istruzione @code{switch} -@cindex @code{switch}, istruzione -@cindex @code{case}, parola chiave -@cindex parola chiave @code{case} -@cindex @code{default}, parola chiave -@cindex parola chiave @code{default} +@cindex @code{switch} (istruzione) +@cindex @code{case} @subentry parola chiave +@cindex @code{case} @subentry @seealso{@code{switch} (istruzione)} +@cindex parola @subentry chiave @code{case} +@cindex @code{default} @subentry parola chiave +@cindex @code{default} @subentry @seealso{@code{switch} (istruzione)} +@cindex parola @subentry chiave @code{default} @ifnotinfo Questa @@ -15505,10 +15615,10 @@ chiamare una funzione di nome @code{uso()}. @node Istruzione break @subsection L'istruzione @code{break} -@cindex @code{break}, istruzione -@cindex istruzione @code{break} -@cindex cicli, uscita -@cindex cicli, istruzione @code{break} e +@cindex @code{break} (istruzione) +@cindex istruzione @subentry @code{break} +@cindex cicli @subentry uscita +@cindex cicli @subentry istruzione @code{break} e L'istruzione @code{break} esce dal ciclo pi@`u interno @code{for}, @code{while} o @code{do} dentro al quale si trova. L'esempio seguente @@ -15571,10 +15681,10 @@ Questo argomento @`e trattato in @ref{Istruzione switch}. @c @cindex @code{break}, outside of loops @c @cindex historical features @c @cindex @command{awk} language, POSIX version -@cindex POSIX @command{awk}, @code{break} e -@cindex angolo buio, istruzione @code{break} -@cindex @command{gawk}, istruzione @code{break} in -@cindex Brian Kernighan, @command{awk} di +@cindex POSIX @command{awk} @subentry @code{break} (istruzione) +@cindex angolo buio @subentry istruzione @subentry @code{break} +@cindex @command{gawk} @subentry @code{break} (istruzione) in +@cindex Brian Kernighan @subentry @command{awk} di L'istruzione @code{break} non ha significato se usata fuori dal corpo di un ciclo o di un'istruzione @code{switch}. Tuttavia, anche se la cosa non @`e mai stata documentata, @@ -15588,8 +15698,8 @@ e lo stesso fa @command{gawk}. @node Istruzione continue @subsection L'istruzione @code{continue} -@cindex @code{continue}, istruzione -@cindex istruzione @code{continue} +@cindex @code{continue} (istruzione) +@cindex istruzione @subentry @code{continue} Analogamente a @code{break}, l'istruzione @code{continue} @`e usata solo all'interno di cicli @code{for}, @code{while} e @code{do}. L'istruzione ignora il resto del corpo del ciclo, facendo s@`{@dotless{i}} che la successiva iterazione @@ -15613,7 +15723,7 @@ BEGIN @{ @end example @noindent -Questo programma stampa tutti i numeri da 0 a 20---tranne il 5, in cui +Questo programma stampa tutti i numeri da 0 a 20 --- tranne il 5, in cui l'istruzione @code{printf} @`e saltata. Siccome l'incremento @samp{x++} non viene saltato, @code{x} non rimane fermo al valore 5. Si confronti il ciclo @code{for} dell'esempio precedente con il seguente ciclo @code{while}: @@ -15635,13 +15745,13 @@ BEGIN @{ Questo programma inizia un ciclo infinito dopo che @code{x} ha assunto il valore 5, poich@'e l'istruzione di incremento (@samp{x++}) non @`e mai raggiunta. -@c @cindex @code{continue}, fuori da un ciclo -@c @cindex funzionalit@`a del passato -@c @cindex linguaggio @command{awk}, versione POSIX -@cindex POSIX @command{awk}, istruzione @code{continue} e -@cindex angolo buio, istruzione @code{continue} -@cindex @command{gawk}, istruzione @code{continue} in -@cindex Brian Kernighan, @command{awk} di +@c @cindex @code{continue}, outside of loops +@c @cindex historical features +@c @cindex @command{awk} language, POSIX version +@cindex POSIX @command{awk} @subentry @code{continue} (istruzione) +@cindex angolo buio @subentry istruzione @subentry @code{continue} +@cindex @command{gawk} @subentry @code{continue} (istruzione) in +@cindex Brian Kernighan @subentry @command{awk} di L'istruzione @code{continue} non ha un significato speciale se appare in un'istruzione @code{switch}, e non ha alcun significato se usata fuori dal corpo di un ciclo. Le prime versioni di @command{awk} trattavano le @@ -15660,8 +15770,8 @@ e lo stesso vale per @command{gawk}. @node Istruzione next @subsection L'istruzione @code{next} -@cindex @code{next}, istruzione -@cindex istruzione @code{next} +@cindex @code{next} (istruzione) +@cindex istruzione @subentry @code{next} L'istruzione @code{next} fa s@`{@dotless{i}} che @command{awk} termini immediatamente l'elaborazione del record corrente e proceda a elaborare il record successivo. @@ -15675,7 +15785,7 @@ successivo immediatamente, ma non altera il flusso del controllo in alcun modo (cio@`e, il resto dell'azione in esecuzione prosegue con il nuovo record in input). -@cindex @command{awk}, programmi, eseguire +@cindex programmi @command{awk} @subentry eseguire Al livello pi@`u alto, l'esecuzione di un programma @command{awk} @`e un ciclo che legge un record in input e quindi confronta il criterio di ricerca di ciascuna regola con il record stesso. Se si vede questo ciclo come un @@ -15710,16 +15820,14 @@ in input, vengono eseguite le eventuali regole @code{END} presenti. @xref{BEGIN/END}. L'istruzione @code{next} non @`e consentita all'interno delle regole -@code{BEGINFILE} ed @code{ENDFILE}. -@xref{BEGINFILE/ENDFILE}. +@code{BEGINFILE} ed @code{ENDFILE}. @xref{BEGINFILE/ENDFILE}. -@c @cindex @command{awk} language, POSIX version @c @cindex @code{next}, inside a user-defined function -@cindex @code{BEGIN}, criterio di ricerca, istruzioni @code{next}/@code{nextfile} e -@cindex @code{END}, criterio di ricerca, istruzioni @code{next}/@code{nextfile} e -@cindex POSIX @command{awk}, istruzioni @code{next}/@code{nextfile} e -@cindex @code{next}, istruzione, in funzioni definite dall'utente -@cindex funzioni definite dall'utente, istruzioni @code{next}/@code{nextfile} e +@cindex @code{BEGIN} (regola) @subentry istruzioni @code{next}/@code{nextfile} e +@cindex @code{END} (regola) @subentry istruzioni @code{next}/@code{nextfile} e +@cindex POSIX @command{awk} @subentry @code{next}/@code{nextfile} (istruzioni) +@cindex @code{next} (istruzione) @subentry in funzione definita dall'utente +@cindex funzione definita dall'utente @subentry istruzioni @code{next}/@code{nextfile} e Secondo lo standard POSIX, il comportamento di @command{awk} @`e indefinito se @code{next} @`e usato in una regola @code{BEGIN} o @code{END}. @command{gawk} considera questo come un errore di sintassi. Sebbene POSIX @@ -15733,8 +15841,8 @@ a partire dalla prima regola del programma. @node Istruzione nextfile @subsection L'istruzione @code{nextfile} -@cindex @code{nextfile}, istruzione -@cindex istruzione @code{nextfile} +@cindex @code{nextfile} (istruzione) +@cindex istruzione @subentry @code{nextfile} L'istruzione @code{nextfile} @`e simile all'istruzione @code{next}. @@ -15791,11 +15899,11 @@ includerla nello standard POSIX. Si veda @uref{http://austingroupbugs.net/view.php?id=607, il sito web dell'Austin Group}. @end quotation -@cindex funzioni definite dall'utente, istruzioni @code{next}/@code{nextfile} e -@cindex @code{nextfile}, in funzioni definite dall'utente -@cindex Brian Kernighan, @command{awk} di -@cindex @command{mawk}, programma di utilit@`a -@cindex programma di utilit@`a @command{mawk} +@cindex funzione definita dall'utente @subentry istruzioni @code{next}/@code{nextfile} e +@cindex @code{nextfile} (istruzione) @subentry in funzioni definite dall'utente +@cindex Brian Kernighan @subentry @command{awk} di +@cindex @command{mawk} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{mawk} Le versioni correnti di BWK @command{awk} e @command{mawk} entrambe prevedono @code{nextfile}. Tuttavia, non sono consentite istruzioni @code{nextfile} all'interno del corpo delle funzioni @@ -15809,8 +15917,8 @@ qualsiasi altra istruzione @code{nextfile}. @node Istruzione exit @subsection L'istruzione @code{exit} -@cindex @code{exit}, istruzione -@cindex istruzione @code{exit} +@cindex @code{exit} (istruzione) +@cindex istruzione @subentry @code{exit} L'istruzione @code{exit} fa s@`{@dotless{i}} che @command{awk} termini immediatamente l'esecuzione della regola corrente e che termini di elaborare l'input; qualsiasi input ancora da elaborare @`e ignorato. L'istruzione @code{exit} @`e @@ -15820,10 +15928,10 @@ scritta come segue: @code{exit} [@var{codice di ritorno}] @end display -@cindex @code{BEGIN}, criterio di ricerca, istruzione @code{exit} e -@cindex criterio di ricerca @code{BEGIN}, istruzione @code{exit} e -@cindex @code{END}, criterio di ricerca, istruzione @code{exit} e -@cindex criterio di ricerca @code{END}, istruzione @code{exit} e +@cindex @code{BEGIN} (regola) @subentry istruzione @code{exit} e +@cindex regola @subentry @code{BEGIN} @subentry @code{exit} (istruzione) e +@cindex @code{END} (regola) @subentry istruzione @code{exit} e +@cindex regola @subentry @code{END} @subentry @code{exit} (istruzione) e Quando un'istruzione @code{exit} @`e eseguita all'interno di una regola @code{BEGIN}, il programma termina completamente l'elaborazione. Nessun record in input viene letto. Tuttavia, se una regola @code{END} @`e presente, come parte @@ -15846,7 +15954,7 @@ una variabile a un valore diverso da zero, prima di invocare l'istruzione @xref{Funzione assert} per un esempio di questo tipo. -@cindex angolo buio, istruzione @code{exit} +@cindex angolo buio @subentry istruzione @subentry @code{exit} Se si specifica un argomento all'istruzione @code{exit}, il suo valore @`e usato come codice di ritorno finale dell'elaborazione @command{awk}. Se non viene specificato alcun argomento, @@ -15859,7 +15967,7 @@ argomento, @command{awk} usa il codice di ritorno specificato in precedenza. @value{DARKCORNER} @xref{Codice di ritorno} per maggiori informazioni. -@cindex convenzioni di programmazione, istruzione @code{exit} +@cindex convenzioni di programmazione @subentry istruzione @code{exit} Per esempio, si supponga che si sia verificata una condizione di errore difficile o impossibile da gestire. Convenzionalmente, i programmi la segnalano terminando con un codice di ritorno diverso da zero. Un programma @@ -15891,8 +15999,8 @@ risultati coerenti tra loro in sistemi operativi diversi. @node Variabili predefinite @section Variabili predefinite -@cindex predefinite, variabili -@cindex variabili predefinite +@cindex predefinita @subentry variabile +@cindex variabili @subentry predefinite La maggior parte delle variabili @command{awk} sono disponibili per essere usate dall'utente secondo le proprie esigenze; @@ -15907,7 +16015,7 @@ maniera desiderata. Altre variabili sono impostate automaticamente da @command{awk}, in modo da poter comunicare al programma in esecuzione informazioni sul modo di procedere interno di @command{awk}. -@cindex @command{gawk}, variabili predefinite e +@cindex @command{gawk} @subentry variabili predefinite e Questa @value{SECTION} documenta tutte le variabili predefinite di @command{gawk}; molte di queste variabili sono anche documentate nei @value{CHAPTER} che descrivono le loro aree di influenza. @@ -15922,8 +16030,8 @@ Questa @value{SECTION} documenta tutte le variabili predefinite di @node Variabili modificabili dall'utente @subsection Variabili predefinite modificabili per controllare @command{awk} -@cindex variabili predefinite, modificabili dall'utente -@cindex modificabili dall'utente, variabili +@cindex variabili @subentry predefinite @subentry modificabili dall'utente +@cindex modificabili dall'utente @subentry variabili La seguente @`e una lista alfabetica di variabili che @`e possibile modificare per controllare come @command{awk} gestisce alcuni compiti. @@ -15936,11 +16044,11 @@ modalit@`a compatibile sono menzionate nella descrizione di ogni variabile.) @table @code -@cindex @code{BINMODE}, variabile -@cindex variabile @code{BINMODE} -@cindex binario, input/output -@cindex input/output binario -@cindex differenze tra @command{awk} e @command{gawk}, variabile @code{BINMODE} +@cindex @code{BINMODE} (variabile) +@cindex variabile @subentry @code{BINMODE} +@cindex binario @subentry input/output +@cindex input/output @subentry binario +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabile @code{BINMODE} @item BINMODE # Su sistemi non-POSIX, questa variabile specifica l'uso della modalit@`a binaria per tutto l'I/O. I valori numerici di uno, due o tre specificano che i file @@ -15958,11 +16066,11 @@ devono usare I/O binario. Ogni altro valore di stringa @`e trattato come dettaglio in @ref{Uso su PC}. @command{mawk} (@pxref{Altre versioni}) prevede questa variabile, ma consente solo valori numerici. -@cindex @code{CONVFMT}, variabile -@cindex variabile @code{CONVFMT} -@cindex POSIX @command{awk}, variabile @code{CONVFMT} e -@cindex numeri, conversione in stringhe -@cindex stringhe, conversione in numeri +@cindex @code{CONVFMT} (variabile) +@cindex variabile @subentry @code{CONVFMT} +@cindex POSIX @command{awk} @subentry @code{CONVFMT} (variabile) +@cindex numeri @subentry conversione in stringhe +@cindex stringa @subentry conversione in numero @item @code{CONVFMT} Una stringa che controlla la conversione di numeri in stringhe (@pxref{Conversione}). @@ -15972,12 +16080,12 @@ In effetti @`e la stringa passata come primo argomento alla funzione Il suo valore di default @`e @code{"%.6g"}. @code{CONVFMT} @`e stata introdotta dallo standard POSIX. -@cindex @command{gawk}, variabile @code{FIELDWIDTHS} in -@cindex @code{FIELDWIDTHS}, variabile -@cindex variabile @code{FIELDWIDTHS} -@cindex differenze tra @command{awk} e @command{gawk}, variabile @code{FIELDWIDTHS} -@cindex separatori di campo, variabile @code{FIELDWIDTHS} e -@cindex campo, separatori di, variabile @code{FIELDWIDTHS} e +@cindex @command{gawk} @subentry variabile @subentry @code{FIELDWIDTHS} in +@cindex @code{FIELDWIDTHS} (variabile) +@cindex variabile @subentry @code{FIELDWIDTHS} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabile @code{FIELDWIDTHS} +@cindex separatore di campo @subentry variabile @code{FIELDWIDTHS} e +@cindex campi @subentry separatore di @subentry variabile @code{FIELDWIDTHS} e @item FIELDWIDTHS # Una lista di posizioni di colonna, separate da spazi, per dire a @command{gawk} @@ -15990,12 +16098,12 @@ Assegnando un valore a @code{FIELDWIDTHS}, le variabili @code{FS} e @emph{non} vengono usate per effettuare la divisione in campi. @xref{Dimensione costante} per maggiori informazioni. -@cindex @command{gawk}, variabile @code{FPAT} in -@cindex @code{FPAT}, variabile -@cindex variabile @code{FPAT} -@cindex differenze tra @command{awk} e @command{gawk}, variabile @code{FPAT} -@cindex separatori di campo, variabile @code{FPAT} e -@cindex campo, separatori di, variabile @code{FPAT} e +@cindex @command{gawk} @subentry variabile @subentry @code{FPAT} in +@cindex @code{FPAT} (variabile) +@cindex variabile @subentry @code{FPAT} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabile @code{FPAT} +@cindex separatore di campo @subentry variabile @code{FPAT} e +@cindex campi @subentry separatore di @subentry variabile @code{FPAT} e @item FPAT # Un'espressione regolare (di tipo stringa) per dire a @command{gawk} di creare i campi utilizzando come delimitatore il testo che corrisponde @@ -16005,10 +16113,10 @@ le variabili @code{FS} e @code{FIELDWIDTHS} @emph{non} vengono usate per effettuare la divisione in campi. @xref{Separazione in base al contenuto} per maggiori informazioni. -@cindex @code{FS}, variabile -@cindex variabile @code{FS} -@cindex campo, separatori di -@cindex separatori di campo +@cindex @code{FS} (variabile) +@cindex variabile @subentry @code{FS} +@cindex campi @subentry separatore di +@cindex separatore di campo @item FS Il separatore dei campi in input (@pxref{Separatori di campo}). Il valore pu@`o essere una stringa di un solo carattere o un'espressione @@ -16021,7 +16129,7 @@ specifica il comportamento quando @code{FS} @`e la stringa nulla. Nonostante questo, alcune altre versioni di @command{awk} trattano @code{""} in modo speciale.) -@cindex POSIX @command{awk}, variabile @code{FS} e +@cindex POSIX @command{awk} @subentry @code{FS} (variabile) Il valore di default @`e @w{@code{" "}}, una stringa consistente in un singolo spazio. In via eccezionale, questo valore significa che qualsiasi sequenza di spazi, TAB, e/o ritorni a capo costituisce @@ -16036,7 +16144,7 @@ l'opzione @option{-F}: awk -F, '@var{programma}' @var{file-in-input} @end example -@cindex @command{gawk}, separatori di campo e +@cindex @command{gawk} @subentry separatore di campo e Se @command{gawk} sta usando @code{FIELDWIDTHS} o @code{FPAT} per separare i campi, assegnare un valore a @code{FS} fa s@`{@dotless{i}} che @command{gawk} torni alla @@ -16045,13 +16153,13 @@ Un modo semplice per fare questo @`e semplicemente quello di scrivere l'istruzione @samp{FS = FS}, aggiungendo magari un commento esplicativo. -@cindex @command{gawk}, variabile @code{IGNORECASE} in -@cindex @code{IGNORECASE}, variabile -@cindex variabile @code{IGNORECASE} -@cindex differenze tra @command{awk} e @command{gawk}, variabile @code{IGNORECASE} -@cindex maiuscolo/minuscolo, confronti tra stringhe e -@cindex maiuscolo/minuscolo, @dfn{regexp} e -@cindex espressioni regolari, maiuscolo/minuscolo +@cindex @command{gawk} @subentry variabile @subentry @code{IGNORECASE} in +@cindex @code{IGNORECASE} (variabile) +@cindex variabile @subentry @code{IGNORECASE} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabile @code{IGNORECASE} +@cindex maiuscolo/minuscolo @subentry confronti tra stringhe e +@cindex maiuscolo/minuscolo @subentry @dfn{regexp} e +@cindex espressioni regolari @subentry maiuscolo/minuscolo @item IGNORECASE # Se la variabile @code{IGNORECASE} @`e diversa da zero o dalla stringa nulla, tutti i confronti tra stringhe @@ -16069,13 +16177,13 @@ e non influenza la separazione dei campi qualora si usi un separatore di campo costituito da un unico carattere. @xref{Maiuscolo-Minuscolo}. -@cindex @command{gawk}, variabile @code{LINT} in -@cindex @code{LINT}, variabile -@cindex variabile @code{LINT} -@cindex differenze tra @command{awk} e @command{gawk}, variabile @code{LINT} -@cindex @dfn{lint}, controlli -@cindex controlli @dfn{lint} -@item LINT # +@cindex @command{gawk} @subentry variabile @subentry @code{LINT} in +@cindex @code{LINT} (variabile) +@cindex variabile @subentry @code{LINT} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabile @code{LINT} +@cindex @dfn{lint} @subentry controlli +@cindex controllo @subentry @dfn{lint} +@item LINT o Quando questa variabile @`e vera (non uguale a zero e non uguale alla stringa nulla), @command{gawk} si comporta come se fosse stata specificata sulla riga di comando l'opzione @option{--lint} @@ -16099,10 +16207,10 @@ diversi aspetti del comportamente di @command{gawk}, il controllo degli avvertimenti di @dfn{lint} durante l'esecuzione del programma @`e indipendente dall'implementazione @command{awk} in esecuzione. -@cindex @code{OFMT}, variabile -@cindex variabile @code{OFMT} -@cindex numeri, conversione in stringhe -@cindex stringhe, conversione in numeri +@cindex @code{OFMT} (variabile) +@cindex variabile @subentry @code{OFMT} +@cindex numeri @subentry conversione in stringhe +@cindex stringa @subentry conversione in numero @item OFMT @`E questa la stringa che controlla la conversione di numeri in stringhe (@pxref{Conversione}) quando li @@ -16115,45 +16223,45 @@ usavano @code{OFMT} per specificare il formato da usare per convertire numeri in stringhe in espressioni generali; questo compito @`e ora svolto da @code{CONVFMT}. -@cindex funzione @code{sprintf()}, variabile @code{OFMT} e -@cindex @code{print}, istruzione, variabile @code{OFMT} e -@cindex istruzione @code{print}, variabile @code{OFMT} e -@cindex variabile @code{OFS} -@cindex @code{OFS}, variabile -@cindex campo, separatori di -@cindex separatori di campo +@cindex funzione @subentry @code{sprintf()} (variabile) @code{OFMT} e +@cindex @code{print} (istruzione) @subentry variabile @code{OFMT} e +@cindex istruzione @subentry @code{print} @subentry @code{OFMT} (variabile) e +@cindex variabile @subentry @code{OFS} +@cindex @code{OFS} (variabile) +@cindex campi @subentry separatore di +@cindex separatore di campo @item OFS @`E il separatore dei campi in output (@pxref{Separatori di output}). @`E ci@`o che viene stampato in output per separare i campi stampati da un'istruzione @code{print}. Il suo valore di default @`e @w{@code{" "}}, una stringa costituita da un solo spazio. -@cindex @code{ORS}, variabile -@cindex variabile @code{ORS} +@cindex @code{ORS} (variabile) +@cindex variabile @subentry @code{ORS} @item ORS Il separatore dei record in output. Viene stampato alla fine di ogni istruzione @code{print}. Il suo valore di default @`e @code{"\n"}, il carattere di ritorno a capo. (@xref{Separatori di output}.) -@cindex @code{PREC}, variabile -@cindex variabile @code{PREC} +@cindex @code{PREC} (variabile) +@cindex variabile @subentry @code{PREC} @item PREC # La precisione disponibile nei numeri in virgola mobile a precisione arbitraria, per default 53 bit (@pxref{Impostare la precisione}). -@cindex @code{ROUNDMODE}, variabile -@cindex variabile @code{ROUNDMODE} +@cindex @code{ROUNDMODE} (variabile) +@cindex variabile @subentry @code{ROUNDMODE} @item ROUNDMODE # La modalit@`a di arrotondamento da usare per operazioni aritmetiche a precisione arbitraria svolte sui numeri, per default @code{"N"} (@code{roundTiesToEven} nello standard IEEE 754; @pxref{Impostare modo di arrotondare}). -@cindex @code{RS}, variabile -@cindex variabile @code{RS} -@cindex separatori di record -@cindex record, separatori di +@cindex @code{RS} (variabile) +@cindex variabile @subentry @code{RS} +@cindex separatore di record +@cindex record @subentry separatore di @item @code{RS} Il separatore tra record in input. Il suo valore di default @`e una stringa contenente il solo carattere di ritorno a capo, il che significa che un record in input @@ -16171,10 +16279,10 @@ se @command{gawk} @`e in modalit@`a compatibile (@pxref{Opzioni}), @`e usato solo il primo carattere del valore di @code{RS}. -@cindex @code{SUBSEP}, variabile -@cindex variabile @code{SUBSEP} -@cindex separatori di indici -@cindex indici, separatori di +@cindex @code{SUBSEP} (variabile) +@cindex variabile @subentry @code{SUBSEP} +@cindex separatore di indici +@cindex indici di vettore @subentry separatore di @item @code{SUBSEP} Il separatore di indici. Ha il valore di default di @code{"\034"} ed @`e usato per separare le parti di cui sono composti gli indici @@ -16183,11 +16291,11 @@ di un vettore multidimensionale. Quindi, l'espressione in realt@`a accede a @code{pippo["A\034B"]} (@pxref{Vettori multidimensionali}). -@cindex @command{gawk}, variabile @code{TEXTDOMAIN} in -@cindex @code{TEXTDOMAIN}, variabile -@cindex variabile @code{TEXTDOMAIN} -@cindex differenze tra @command{awk} e @command{gawk}, variabile @code{TEXTDOMAIN} -@cindex internazionalizzazione, localizzazione +@cindex @command{gawk} @subentry variabile @subentry @code{TEXTDOMAIN} in +@cindex @code{TEXTDOMAIN} (variabile) +@cindex variabile @subentry @code{TEXTDOMAIN} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabile @code{TEXTDOMAIN} +@cindex internazionalizzazione @subentry localizzazione @item TEXTDOMAIN # Usata per l'internazionalizzazione di programmi a livello di @command{awk}. Imposta il dominio di testo (@dfn{text domain}) di default per costanti stringa @@ -16205,8 +16313,8 @@ Il valore di default di @code{TEXTDOMAIN} @`e @code{"messages"}. @node Variabili auto-assegnate @subsection Variabili predefinite con cui @command{awk} fornisce informazioni -@cindex predefinite, variabili, che forniscono informazioni -@cindex variabili predefinite, che forniscono informazioni +@cindex predefinita @subentry variabile @subentry che fornisce informazioni +@cindex variabili @subentry predefinite @subentry che forniscono informazioni Quella che segue @`e una lista in ordine alfabetico di variabili che @command{awk} imposta automaticamente in determinate situazioni per fornire informazioni a un programma. @@ -16218,9 +16326,9 @@ modalit@`a compatibile (@pxref{Opzioni}), non hanno un significato speciale: @c @asis for docbook @table @asis -@cindex @code{ARGC}/@code{ARGV}, variabili -@cindex argomenti, riga di comando -@cindex riga di comando, argomenti +@cindex @code{ARGC}/@code{ARGV} (variabili) +@cindex argomenti @subentry riga di comando +@cindex riga di comando @subentry argomenti @item @code{ARGC}, @code{ARGV} Gli argomenti della riga di comando disponibili ai programmi @command{awk} sono memorizzati in un vettore di nome @@ -16250,12 +16358,12 @@ contiene @samp{inventory-shipped} e @code{ARGV[2]} contiene dell'indice dell'ultimo elemento di @code{ARGV}, perch@'e gli elementi sono numerati a partire da zero. -@cindex convenzioni di programmazione, variabili @code{ARGC}/@code{ARGV} +@cindex convenzioni di programmazione @subentry @code{ARGC}/@code{ARGV} (variabili) I nomi @code{ARGC} e @code{ARGV}, come pure la convenzione di indicizzare il vettore da 0 a @code{ARGC} @minus{} 1, derivano dal modo in cui il linguaggio C accede agli argomenti presenti sulla riga di comando. -@cindex angolo buio, valore di @code{ARGV[0]} +@cindex angolo buio @subentry valore di @code{ARGV[0]} Il valore di @code{ARGV[0]} pu@`o variare da sistema a sistema. Va anche notato che il programma @emph{non} @`e incluso in @code{ARGV}, e non sono incluse neppure le eventuali opzioni di @@ -16264,9 +16372,9 @@ Va anche notato che il programma @emph{non} su come @command{awk} usa queste variabili. @value{DARKCORNER} -@cindex @code{ARGIND}, variabile -@cindex variabile @code{ARGIND} -@cindex differenze tra @command{awk} e @command{gawk}, variabile @code{ARGIND} +@cindex @code{ARGIND} (variabile) +@cindex variabile @subentry @code{ARGIND} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabile @code{ARGIND} @item @code{ARGIND #} L'indice in @code{ARGV} del file correntemente in elaborazione. Ogni volta che @command{gawk} apre un nuovo @value{DF} per elaborarlo, imposta @@ -16274,20 +16382,20 @@ Ogni volta che @command{gawk} apre un nuovo @value{DF} per elaborarlo, imposta Quando @command{gawk} sta elaborando i file in input, il confronto @samp{FILENAME == ARGV[ARGIND]} @`e sempre verificato. -@cindex file, elaborazione@comma{} variabile @code{ARGIND} e +@cindex file @subentry elaborazione di @subentry variabile @code{ARGIND} e Questa variabile @`e utile nell'elaborazione dei file; consente di stabilire a che punto ci si trova nella lista di @value{DF}, e anche di distinguere tra successive occorrenze dello stesso @value{FN} sulla riga dei comandi. -@cindex nomi di file, distinguere +@cindex nomi @subentry di file @subentry distinguere Anche se @`e possibile modificare il valore di @code{ARGIND} all'interno del programma @command{awk}, @command{gawk} automaticamente lo imposta a un nuovo valore quando viene aperto il file successivo. -@cindex @code{ENVIRON}, vettore -@cindex vettore @code{ENVIRON} -@cindex variabili d'ambiente, nel vettore @code{ENVIRON} +@cindex @code{ENVIRON} (vettore) +@cindex vettore @subentry @code{ENVIRON} +@cindex variabili d'ambiente @subentry nel vettore @code{ENVIRON} @item @code{ENVIRON} Un vettore associativo contenente i valori delle variabili d'ambiente. Gli indici del vettore sono i nomi delle variabili d'ambiente; gli elementi @@ -16328,11 +16436,11 @@ le variabili @pxref{AWKLIBPATH (Variabile)}). @end ifnotdocbook -@cindex @command{gawk}, variabile @code{ERRNO} in -@cindex @code{ERRNO}, variabile -@cindex variabile @code{ERRNO} -@cindex differenze tra @command{awk} e @command{gawk}, variabile @code{ERRNO} -@cindex gestione errori, variabile @code{ERRNO} e +@cindex @command{gawk} @subentry variabile @subentry @code{ERRNO} in +@cindex @code{ERRNO} (variabile) +@cindex variabile @subentry @code{ERRNO} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabile @code{ERRNO} +@cindex gestione errori @subentry variabile @code{ERRNO} e @item @code{ERRNO #} Se si verifica un errore di sistema durante una ridirezione per @code{getline}, durante una lettura per @code{getline} o durante un'operazione di @@ -16359,9 +16467,9 @@ variabile C @code{errno}, @code{PROCINFO["errno"]} sar@`a impostato al valore di @code{errno}. Per errori non di sistema, @code{PROCINFO["errno"]} sar@`a impostata al valore zero. -@cindex @code{FILENAME}, variabile -@cindex variabile @code{FILENAME} -@cindex angolo buio, variabile @code{FILENAME} +@cindex @code{FILENAME} (variabile) +@cindex variabile @subentry @code{FILENAME} +@cindex angolo buio @subentry variabile @subentry @code{FILENAME} @item @code{FILENAME} Il nome del file in input corrente. Quando non ci sono @value{DF} sulla riga dei comandi, @command{awk} legge dallo standard input e @@ -16383,16 +16491,16 @@ non ci si dovrebbe poter contare nei programmi.} che l'uso di @code{getline} (@pxref{Getline}) all'interno di una regola @code{BEGIN} pu@`o implicare l'assegnamento di un valore a @code{FILENAME}. -@cindex @code{FNR}, variabile -@cindex variabile @code{FNR} +@cindex @code{FNR} (variabile) +@cindex variabile @subentry @code{FNR} @item @code{FNR} Il numero del record corrente nel file corrente. @command{awk} incrementa @code{FNR} ogni volta che legge un nuovo record (@pxref{Record}). @command{awk} imposta nuovamente a zero @code{FNR} ogni volta che inizia a leggere un nuovo file in input. -@cindex @code{NF}, variabile -@cindex variabile @code{NF} +@cindex @code{NF} (variabile) +@cindex variabile @subentry @code{NF} @item @code{NF} Il numero di campi nel corrente record in input. @code{NF} @`e impostato ogni volta che si legge un nuovo record, @@ -16405,10 +16513,10 @@ il funzionamento interno di @command{awk}. In particolare, assegnamenti a @code{NF} si possono usare per aggiungere o togliere campi dal record corrente. @xref{Cambiare i campi}. -@cindex @code{FUNCTAB}, vettore -@cindex vettore @code{FUNCTAB} -@cindex @command{gawk}, vettore @code{FUNCTAB} in -@cindex differenze tra @command{awk} e @command{gawk}, variabile @code{FUNCTAB} +@cindex @code{FUNCTAB} (vettore) +@cindex vettore @subentry @code{FUNCTAB} +@cindex @command{gawk} @subentry vettore @subentry @code{FUNCTAB} in +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabile @code{FUNCTAB} @item @code{FUNCTAB #} Un vettore i cui indici e i corrispondenti valori sono i nomi di tutte le funzioni predefinite, definite dall'utente ed estese, presenti nel programma. @@ -16419,18 +16527,18 @@ Il tentativo di usare l'istruzione @code{delete} per eliminare il vettore ogni tentativo di impostare un elemento di @code{FUNCTAB}. @end quotation -@cindex @code{NR}, variabile -@cindex variabile @code{NR} +@cindex @code{NR} (variabile) +@cindex variabile @subentry @code{NR} @item @code{NR} Il numero di record in input che @command{awk} ha elaborato dall'inizio dell'esecuzione del programma (@pxref{Record}). @command{awk} incrementa @code{NR} ogni volta che legge un nuovo record. -@cindex @command{gawk}, vettore @code{PROCINFO} in -@cindex @code{PROCINFO}, vettore -@cindex vettore @code{PROCINFO} -@cindex differenze tra @command{awk} e @command{gawk}, vettore @code{PROCINFO} +@cindex @command{gawk} @subentry vettore @subentry @code{PROCINFO} in +@cindex @code{PROCINFO} (vettore) +@cindex vettore @subentry @code{PROCINFO} +@cindex differenze tra @command{awk} e @command{gawk} @subentry vettore @code{PROCINFO} @item @code{PROCINFO #} Gli elementi di questo vettore danno accesso a informazioni sul programma @command{awk} in esecuzione. @@ -16439,8 +16547,8 @@ sono sicuramente sempre disponibili: @table @code @item PROCINFO["argv"] -@cindex argomenti, riga di comando -@cindex riga di comando, argomenti +@cindex argomenti @subentry riga di comando +@cindex riga di comando @subentry argomenti Il vettore @code{PROCINFO["argv"]} contiene tutti gli argomenti della riga di comando (dopo che l'eventuale elaborazione di valutazione e ridirezione, nelle piattaforme in cui ci@`o debba essere fatto a cura del programma), con @@ -16460,7 +16568,7 @@ Si tenga presente che questo vettore @`e diverso dal vettore standard @code{ARGV} il quale non include quegli argomenti della riga di comando che sono gi@`a stati elaborati da @command{gawk} (@pxref{ARGC e ARGV}). -@cindex effettivo, @dfn{ID di gruppo} dell'utente di @command{gawk} +@cindex effettivo @subentry @dfn{ID di gruppo} dell'utente di @command{gawk} @item PROCINFO["egid"] Il valore restituito dalla chiamata di sistema @code{getegid()}. @@ -16485,7 +16593,7 @@ di input tramite API. Il valore restituito dalla chiamata di sistema @code{getgid()} . @item PROCINFO["identifiers"] -@cindex programma, identificativi in un +@cindex programma @subentry identificativi in un @cindex identificativi in un programma Un sottovettore, indicizzato dai nomi di tutti gli identificativi usati all'interno del programma @command{awk}. Un @dfn{identificativo} @`e @@ -16523,6 +16631,7 @@ vengono pi@`u aggiornati durante l'esecuzione del programma. @item PROCINFO["platform"] @cindex piattaforma di esecuzione +@cindex @code{PROCINFO} (vettore) @subentry ambiente di compilazione Quest'elemento restituisce una stringa che indica la piattaforma per la quale @command{gawk} @`e stato compilato. Il valore sar@`a uno dei seguenti: @@ -16567,8 +16676,8 @@ Assegnando un nuovo valore a questo elemento si cambia quello di default. Il valore restituito dalla chiamata di sistema @code{getuid()}. @item PROCINFO["version"] -@cindex versione di @command{gawk} -@cindex @command{gawk}, versione di +@cindex versione @subentry di @command{gawk} +@cindex @command{gawk} @subentry versione di La versione di @command{gawk}. @end table @@ -16580,19 +16689,19 @@ arbitraria @table @code @item PROCINFO["gmp_version"] -@cindex versione della libreria GNU MP +@cindex versione @subentry della libreria GNU MP La versione della libreria GNU MP. -@cindex versione della libreria GNU MPFR +@cindex versione @subentry della libreria GNU MPFR @item PROCINFO["mpfr_version"] La versione della libreria GNU MPFR. @item PROCINFO["prec_max"] -@cindex precisione massima consentita dalla libreria MPFR +@cindex precisione @subentry massima consentita dalla libreria MPFR La massima precisione consentita da MPFR. @item PROCINFO["prec_min"] -@cindex precisione minima richiesta dalla libreria MPFR +@cindex precisione @subentry minima richiesta dalla libreria MPFR La precisione minima richiesta da MPFR. @end table @@ -16609,15 +16718,15 @@ di @command{gawk} prevede il caricamento dinamico di funzioni di estensione @table @code @item PROCINFO["api_major"] -@cindex versione dell'estensione API @command{gawk} -@cindex estensione API, numero di versione +@cindex versione @subentry dell'estensione API @command{gawk} +@cindex estensione API @subentry numero di versione La versione principale dell'estensione API. @item PROCINFO["api_minor"] La versione secondaria dell'estensione API. @end table -@cindex gruppi supplementari Unix con @command{gawk} +@cindex gruppi @subentry Unix supplementari visualizzati in @command{gawk} Su alcuni sistemi, ci possono essere elementi nel vettore, da @code{"group1"} fino a @code{"group@var{N}"}. @var{N} @`e il numero di gruppi supplementari che il processo [Unix] possiede. Si usi l'operatore @@ -16670,8 +16779,8 @@ pi@`u avanti; si veda @ref{Controllare visita}. @end table -@cindex @code{RLENGTH}, variabile -@cindex variabile @code{RLENGTH} +@cindex @code{RLENGTH} (variabile) +@cindex variabile @subentry @code{RLENGTH} @item @code{RLENGTH} La lunghezza della sottostringa individuata dalla funzione @code{match()} @@ -16681,8 +16790,8 @@ Il suo valore @`e la lunghezza della stringa individuata, oppure @minus{}1 se non @`e stata trovata alcuna corrispondenza. -@cindex @code{RSTART}, variabile -@cindex variabile @code{RSTART} +@cindex @code{RSTART} (variabile) +@cindex variabile @subentry @code{RSTART} @item @code{RSTART} L'indice, in caratteri, da cui parte la sottostringa che @`e individuata dalla funzione @code{match()} @@ -16692,19 +16801,19 @@ Il suo valore @`e la posizione nella stringa da cui inizia la sottostringa individuata, oppure zero, se non @`e stata trovata alcuna corrispondenza. -@cindex @command{gawk}, variabile @code{RT} in -@cindex @code{RT}, variabile -@cindex variabile @code{RT} -@cindex differenze tra @command{awk} e @command{gawk}, variabili @code{RS}/@code{RT} +@cindex @command{gawk} @subentry variabile @subentry @code{RT} in +@cindex @code{RT} (variabile) +@cindex variabile @subentry @code{RT} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabili @code{RS}/@code{RT} @item @code{RT #} Il testo in input che corrisponde al testo individuato da @code{RS}, il separatore di record. Questa variabile viene impostata dopo aver letto ciascun record. -@cindex @command{gawk}, vettore @code{SYMTAB} in -@cindex @code{SYMTAB}, vettore -@cindex vettore @code{SYMTAB} -@cindex differenze tra @command{awk} e @command{gawk}, vettore @code{SYMTAB} +@cindex @command{gawk} @subentry vettore @subentry @code{SYMTAB} in +@cindex @code{SYMTAB} (vettore) +@cindex vettore @subentry @code{SYMTAB} +@cindex differenze tra @command{awk} e @command{gawk} @subentry vettore @code{SYMTAB} @item @code{SYMTAB #} Un vettore i cui indici sono i nomi di tutte le variabili globali e i vettori definiti nel programma. @code{SYMTAB} rende visibile al @@ -16785,11 +16894,11 @@ sono disponibili come elementi all'interno del vettore @code{SYMTAB}. @end table @sidebar Modificare @code{NR} e @code{FNR} -@cindex @code{NR}, variabile, modifica di -@cindex variabile @code{NR}, modifica di -@cindex @code{FNR}, variabile, modifica di -@cindex variabile @code{FNR}, modifica di -@cindex angolo buio, variabili @code{FNR}/@code{NR} +@cindex @code{NR} (variabile) @subentry modifica di +@cindex variabile @subentry @code{NR} @subentry modifica di +@cindex @code{FNR} (variabile) @subentry modifica di +@cindex variabile @subentry @code{FNR} @subentry modifica di +@cindex angolo buio @subentry variabile @subentry @code{FNR}/@code{NR} @command{awk} incrementa le variabili @code{NR} e @code{FNR} ogni volta che legge un record, invece che impostarle al valore assoluto del numero di record letti. Ci@`o significa che un programma pu@`o @@ -16820,10 +16929,10 @@ di @code{FILENAME}. @node ARGC e ARGV @subsection Usare @code{ARGC} e @code{ARGV} -@cindex @code{ARGC}/@code{ARGV}, variabili, come usarle -@cindex variabili @code{ARGC}/@code{ARGV}, come usarle -@cindex argomenti, riga di comando -@cindex riga di comando, argomenti +@cindex @code{ARGC}/@code{ARGV} (variabili) @subentry come usarle +@cindex variabile @subentry @code{ARGC}/@code{ARGV} @subentry utilizzo +@cindex argomenti @subentry riga di comando +@cindex riga di comando @subentry argomenti @iftex La @@ -16945,7 +17054,7 @@ BEGIN @{ @} @end example -@cindex differenze tra @command{awk} e @command{gawk}, variabili @code{ARGC}/@code{ARGV} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabili @code{ARGC}/@code{ARGV} Terminare le opzioni di @command{awk} con @option{--} non @`e necessario in @command{gawk}. A meno che non si specifichi @option{--posix}, @command{gawk} inserisce, senza emettere messaggi, ogni opzione non @@ -17137,8 +17246,8 @@ effettivamente memorizzato all'inizio di un blocco di memoria. L'indice uno specifica il secondo elemento, che @`e memorizzato subito dopo il primo elemento, e cos@`{@dotless{i}} via. @`E impossibile aggiungere ulteriori elementi al vettore, perch@'e esso pu@`o contenere solo il numero di elementi dichiarato. -(Alcuni linguaggi consentono indici iniziali e finali arbitrari---p.es., -@samp{15 .. 27}---per@`o la dimensione del vettore rimane fissa una volta che +(Alcuni linguaggi consentono indici iniziali e finali arbitrari --- p.es., +@samp{15 .. 27} --- per@`o la dimensione del vettore rimane fissa una volta che il vettore sia stato dichiarato.) @c 1/2015: Do not put the numeric values into @code. Array element @@ -17179,10 +17288,10 @@ Vengono memorizzati solo i valori; gli indici sono definiti implicitamente dall'ordine dei valori. Qui, 8 @`e il valore il cui indice @`e zero, perch@'e 8 appare nella posizione con zero elementi prima di essa. -@cindex vettori, indicizzazione -@cindex indicizzare i vettori -@cindex associativi, vettori -@cindex vettori associativi +@cindex vettori @subentry indicizzazione di +@cindex indici di vettore +@cindex associativi @subentry vettori +@cindex vettori @subentry associativi I vettori in @command{awk} non sono di questo tipo: sono invece @dfn{associativi}. Ci@`o significa che ogni vettore @`e un insieme di coppie, ognuna costituita @@ -17305,8 +17414,8 @@ decimo elemento il cui valore sia @w{@code{"numero dieci"}}. Il risultato sar@` @end docbook @noindent -@cindex sparsi, vettori -@cindex vettori sparsi +@cindex sparsi @subentry vettori +@cindex vettori @subentry sparsi Ora il vettore @`e @dfn{sparso}, il che significa semplicemente che non sono usati alcuni indici. Ha gli elementi 0, 1, 2, 3 e 10, ma mancano gli elementi 4, 5, 6, 7, 8 e 9. @@ -17375,11 +17484,11 @@ indici dei vettori; questo verr@`a trattato in maggior dettaglio nella Qui sopra, il numero @code{1} non @`e tra doppi apici, perch@'e @command{awk} lo converte automaticamente in una stringa. -@cindex @command{gawk}, variabile @code{IGNORECASE} in -@cindex maiuscolo/minuscolo, distinzione, indici dei vettori e -@cindex vettori, ordinamento, variabile @code{IGNORECASE} e -@cindex @code{IGNORECASE}, variabile, indici dei vettori e -@cindex variabile @code{IGNORECASE}, indici dei vettori e +@cindex @command{gawk} @subentry variabile @subentry @code{IGNORECASE} in +@cindex maiuscolo/minuscolo @subentry distinzione @subentry negli indici dei vettori +@cindex vettori @subentry ordinamento @subentry variabile @code{IGNORECASE} e +@cindex @code{IGNORECASE} (variabile) @subentry indici dei vettori e +@cindex variabile @subentry @code{IGNORECASE} @subentry indici di vettore e Il valore di @code{IGNORECASE} non ha alcun effetto sull'indicizzazione dei vettori. Lo stesso valore di stringa usato per memorizzare un elemento di un vettore pu@`o essere usato per richiamarlo. @@ -17393,9 +17502,9 @@ un elemento @`e indipendente dal numero di elementi nel vettore. @node Visitare elementi @subsection Come esaminare un elemento di un vettore -@cindex vettori, esaminare elementi -@cindex vettore, elementi di un -@cindex elementi di un vettore +@cindex vettori @subentry elementi @subentry esaminare gli +@cindex vettori @subentry elementi +@cindex elementi @subentry di vettore Il modo principale di usare un vettore @`e quello di esaminare uno dei suoi elementi. Un @dfn{riferimento al vettore} @`e un'espressione come questa: @@ -17416,16 +17525,16 @@ Il valore del riferimento al vettore @`e il valore corrente di quell'elemento del vettore. Per esempio, @code{pippo[4.3]} @`e un'espressione che richiama l'elemento del vettore @code{pippo} il cui indice @`e @samp{4.3}. -@cindex vettori, elementi non assegnati -@cindex elementi di vettore non assegnati -@cindex elementi di vettore vuoti +@cindex vettori @subentry elementi @subentry non assegnati +@cindex elementi @subentry di vettore @subentry non assegnati +@cindex elementi @subentry di vettore @subentry vuoti Un riferimento a un elemento di un vettore il cui indice non esiste ancora restituisce un valore uguale a @code{""}, la stringa nulla. Questo comprende elementi a cui non @`e stato assegnato un valore ed elementi che sono stati eliminati (@pxref{Cancellazione}). -@cindex elementi inesistenti di un vettore -@cindex vettori, elementi che non esistono +@cindex elementi @subentry di vettore @subentry inesistenti +@cindex vettori @subentry elementi @subentry inesistenti @quotation NOTA Un riferimento a un elemento inesistente crea @emph{automaticamente} quell'elemento di vettore, con la stringa nulla come valore. (In certi casi, @@ -17447,7 +17556,7 @@ stringa vuota come valore @`e un'operazione valida (anche se un po' insolita). @end quotation @c @cindex arrays, @code{in} operator and -@cindex @code{in}, operatore, verificare se un elemento esiste in un vettore +@cindex @code{in} (operatore) @subentry verificare se un elemento esiste in un vettore Per determinare se un elemento con un dato indice esiste in un vettore, si usi la seguente espressione: @@ -17455,7 +17564,7 @@ si usi la seguente espressione: @var{indice} in @var{vettore} @end example -@cindex effetti collaterali, indicizzazione di vettori +@cindex effetti collaterali @subentry indicizzazione di vettori @noindent Quest'espressione verifica se lo specifico indice @var{indice} esiste, senza l'effetto collaterale di creare quell'elemento nel caso che esso non sia @@ -17489,8 +17598,8 @@ if (frequenze[2] != "") @node Impostare elementi @subsection Assegnare un valore a elementi di un vettore -@cindex vettori, elementi, assegnare valori -@cindex elementi di vettori, assegnare valori +@cindex vettori @subentry elementi @subentry assegnare valori +@cindex elementi @subentry di vettore @subentry assegnare valori a Agli elementi di un vettore possono essere assegnati valori proprio come alle variabili di @command{awk}: @@ -17507,7 +17616,7 @@ a quell'elemento del vettore. @node Esempio di vettore @subsection Esempio semplice di vettore -@cindex vettori, un esempio sull'uso +@cindex vettori @subentry esempio sull'uso Il seguente programma prende una lista di righe, ognuna delle quali inizia con un numero di riga, e le stampa in ordine di numero di riga. I numeri di riga @@ -17584,10 +17693,10 @@ END @{ @node Visitare un intero vettore @subsection Visitare tutti gli elementi di un vettore -@cindex elementi di vettori, visitare -@cindex visitare vettori -@cindex vettori, visitare -@cindex cicli, @code{for}, visita di un vettore +@cindex elementi @subentry di vettore @subentry visitare +@cindex visitare @subentry vettori +@cindex vettori @subentry visitare +@cindex cicli @subentry @code{for} @subentry visita di un vettore Nei programmi che usano vettori, @`e spesso necessario usare un ciclo che esegue un'azione su ciascun elemento di un vettore. In altri linguaggi, dove @@ -17607,14 +17716,14 @@ for (@var{variabile} in @var{vettore}) @end example @noindent -@cindex @code{in}, operatore, uso in cicli -@cindex operatore @code{in}, uso in cicli +@cindex @code{in} (operatore) @subentry uso in cicli +@cindex operatore @subentry @code{in} @subentry uso in cicli Questo ciclo esegue @var{corpo} una volta per ogni indice in @var{vettore} che il programma ha usato precedentemente, con la variabile @var{variabile} impostata a quell'indice. -@cindex vettori, istruzione @code{for} e -@cindex @code{for}, istruzione, esecuzione di cicli su un vettore +@cindex vettori @subentry istruzione @code{for} e +@cindex @code{for} (istruzione) @subentry esecuzione di cicli su un vettore Il seguente programma usa questa forma dell'istruzione @code{for}. La prima regola visita i record in input e tiene nota di quali parole appaiono (almeno una volta) nell'input, memorizzando un 1 nel vettore @code{usate} con @@ -17652,10 +17761,10 @@ END @{ @xref{Programma utilizzo parole} per un esempio di questo tipo pi@`u dettagliato. -@cindex vettori, elementi di, ordine di accesso da parte dell'operatore @code{in} -@cindex elementi di vettori, ordine di accesso da parte dell'operatore @code{in} -@cindex @code{in}, operatore, ordine di accesso dei vettori -@cindex operatore @code{in}, ordine di accesso dei vettori +@cindex vettori @subentry elementi @subentry ordine di accesso da parte dell'operatore @code{in} +@cindex elementi @subentry di vettore @subentry ordine di accesso da parte dell'operatore @code{in} +@cindex @code{in} (operatore) @subentry ordine di accesso dei vettori +@cindex operatore @subentry @code{in} @subentry ordine di accesso dei vettori L'ordine nel quale gli elementi del vettore sono esaminati da quest'istruzione @`e determinato dalla disposizione interna degli elementi del vettore all'interno di @command{awk} e nell'@command{awk} standard non pu@`o essere controllato @@ -17723,8 +17832,8 @@ determina l'ordine in cui il vettore viene attraversato. Quest'ordine normalmente @`e basato sull'implementazione interna dei vettori e varia da una versione di @command{awk} alla successiva. -@cindex vettori, ordine di visita, controllo dell' -@cindex controllare l'ordine di visita dei vettori +@cindex vettori @subentry ordine di visita @subentry controllo dell' +@cindex controllo @subentry ordine di visita dei vettori Spesso, tuttavia, servirebbe fare qualcosa di semplice, come ``visitare il vettore confrontando gli indici in ordine crescente,'' o ``visitare il vettore confrontando i valori in ordine decrescente.'' @@ -17742,7 +17851,7 @@ dall'utente, da usare per il confronto tra gli elementi di un vettore. Questa funzionalit@`a avanzata verr@`a descritta in seguito in @ref{Ordinamento di vettori}. @end itemize -@cindex @code{PROCINFO}, valori di @code{sorted_in} +@cindex @code{PROCINFO} (vettore) @subentry valori di @code{sorted_in} Sono disponibili i seguenti valori speciali per @code{PROCINFO["sorted_in"]}: @table @code @@ -17884,11 +17993,11 @@ dei vettori; si veda @ref{Funzioni di ordinamento di vettori}. @node Indici numerici di vettore @section Usare numeri per indicizzare i vettori -@cindex numeri, come indici di vettore -@cindex indici di vettori, numeri come -@cindex vettori, indici numerici di -@cindex variabile @code{CONVFMT}, indici di vettore e -@cindex @code{CONVFMT}, variabile, indici di vettore e +@cindex numeri @subentry come indici di vettore +@cindex indici di vettore @subentry numeri come +@cindex vettori @subentry indici @subentry numerici +@cindex variabile @subentry @code{CONVFMT} @subentry indici di vettore e +@cindex @code{CONVFMT} (variabile) @subentry indici di vettore e Un aspetto importante da ricordare riguardo ai vettori @`e che @emph{gli indici dei vettori sono sempre stringhe}. Quando un valore numerico @`e usato come indice, @@ -17916,12 +18025,13 @@ indicizza @code{dati} col valore di tipo stringa @code{"12.153"} Quindi, all'elemento del vettore @code{dati["12.153"]} @`e assegnato il valore uno. Il programma cambia poi il valore di @code{CONVFMT}. La verifica @samp{(xyz in dati)} genera un nuovo -valore di stringa da @code{xyz}---questa volta @code{"12.15"}---perch@'e il +valore di stringa da @code{xyz} --- questa volta @code{"12.15"} --- perch@'e il valore di @code{CONVFMT} consente solo due cifre decimali. Questa verifica d@`a esito negativo, perch@'e @code{"12.15"} @`e diverso da @code{"12.153"}. -@cindex convertire numeri interi che sono indici di vettore -@cindex numeri interi, indici di vettore +@cindex conversione @subentry di numeri interi che sono indici di vettore +@cindex numeri @subentry interi @subentry come indici di vettore +@cindex interi @subentry indici di vettore Secondo le regole di conversione (@pxref{Conversione}), i valori numerici interi vengono convertiti in stringhe sempre come interi, indipendentemente dal @@ -17957,10 +18067,10 @@ effetti difficili da individuare sui programmi. @node Indici non inizializzati @section Usare variabili non inizializzate come indici -@cindex variabili non inizializzate, come indici di vettore -@cindex non inizializzate, variabili, come indici di vettore -@cindex indici di vettore, variabili non inizializzate come -@cindex vettori, indici, variabili non inizializzate come +@cindex variabili @subentry non inizializzate @subentry come indici di vettore +@cindex non inizializzate @subentry variabili @subentry come indici di vettore +@cindex indici di vettore @subentry variabili non inizializzate come +@cindex vettori @subentry indici @subentry variabili non inizializzate come Supponiamo che sia necessario scrivere un programma per stampare i dati di input in ordine inverso. Un tentativo ragionevole per far ci@`o (con qualche dato di @@ -18004,12 +18114,12 @@ Qui, @samp{++} forza @code{righe} a essere di tipo numerico, rendendo quindi il ``vecchio valore'' uno zero numerico. Questo viene poi convertito in @code{"0"} come l'indice del vettore. -@cindex indici di vettore, stringhe nulle come -@cindex nulle, stringhe, come indici di vettore -@cindex stringhe nulle, come indici di vettore -@cindex angolo buio, indici di vettori -@cindex @dfn{lint}, controlli, indici di vettori -@cindex controlli @dfn{lint}, indici di vettori +@cindex indici di vettore @subentry stringhe nulle come +@cindex nulle @subentry stringhe @subentry come indici di vettore +@cindex stringa nulla @subentry come indice di vettore +@cindex angolo buio @subentry indici di vettori +@cindex @dfn{lint} @subentry controlli @subentry indici di vettori +@cindex controllo @subentry @dfn{lint} @subentry indici di vettori Anche se la cosa pu@`o sembrare strana, la stringa nulla (@code{""}) @`e un indice di vettore valido. @value{DARKCORNER} @@ -18019,11 +18129,11 @@ come indice. @node Cancellazione @section L'istruzione @code{delete} -@cindex @code{delete}, istruzione -@cindex istruzione @code{delete} -@cindex eliminare elementi di vettori -@cindex vettori, elementi, eliminazione di -@cindex elementi di vettori, eliminazione di +@cindex @code{delete} (istruzione) +@cindex istruzione @subentry @code{delete} +@cindex eliminare @subentry elementi di vettori +@cindex vettori @subentry elementi @subentry eliminazione di +@cindex elementi @subentry di vettore @subentry eliminazione di Per rimuovere un singolo elemento da un vettore si usa l'istruzione @code{delete}: @@ -18055,8 +18165,8 @@ if (4 in pippo) print "Questo non verr@`a mai stampato" @end example -@cindex nulle, stringhe, eliminazione di elementi di un vettore e -@cindex stringhe nulle, eliminazione di elementi di un vettore e +@cindex nulle @subentry stringhe @subentry eliminazione di elementi di un vettore e +@cindex stringa nulla @subentry eliminazione di elementi di un vettore e @`E importante notare che eliminare un elemento @emph{non} @`e la stessa cosa che assegnargli un valore nullo (la stringa vuota, @code{""}). Per esempio: @@ -18069,21 +18179,21 @@ if (4 in pippo) @end group @end example -@cindex @dfn{lint}, controlli, elementi di vettori -@cindex controlli @dfn{lint}, elementi di vettori -@cindex elementi di vettori, controlli @dfn{lint} per +@cindex @dfn{lint} @subentry controlli @subentry elementi di vettori +@cindex controllo @subentry @dfn{lint} @subentry elementi di vettori +@cindex elementi @subentry di vettore @subentry controlli @dfn{lint} per Non @`e un errore eliminare un elemento che non esiste. Tuttavia, se viene data l'opzione @option{--lint} sulla riga di comando (@pxref{Opzioni}), @command{gawk} emette un messaggio di avvertimento quando viene eliminato un elemento che non @`e presente in un vettore. -@cindex comuni, estensioni, @code{delete} per eliminare interi vettori -@cindex estensioni comuni@comma{} @code{delete} per eliminare interi vettori -@cindex vettori, eliminare l'intero contenuto -@cindex eliminare interi vettori -@cindex @code{delete}, @var{vettore} -@cindex differenze tra @command{awk} e @command{gawk}, elementi dei vettori, eliminazione +@cindex comuni @subentry estensioni @subentry @code{delete} per eliminare interi vettori +@cindex estensioni comuni @subentry @code{delete} per eliminare interi vettori +@cindex vettori @subentry eliminare l'intero contenuto +@cindex eliminare @subentry interi vettori +@cindex @code{delete} (istruzione) @subentry eliminare un elemento di un vettore +@cindex differenze tra @command{awk} e @command{gawk} @subentry elementi dei vettori @subentry eliminazione Tutti gli elementi di un vettore possono essere eliminati con una singola istruzione omettendo l'indice nell'istruzione @code{delete}, in questo modo: @@ -18101,7 +18211,7 @@ Questa forma dell'istruzione @code{delete} @`e ammessa anche da BWK @command{awk} e da @command{mawk}, e anche da diverse altre implementazioni. -@cindex Brian Kernighan, @command{awk} di +@cindex Brian Kernighan @subentry @command{awk} di @quotation NOTA Per molti anni, l'uso di @code{delete} senza un indice era un'estensione comune. A settembre 2012 si @`e deciso di includerla nello @@ -18109,7 +18219,7 @@ standard POSIX. Si veda @uref{http://austingroupbugs.net/view.php?id=544, il sito dell'Austin Group}. @end quotation -@cindex portabilit@`a, eliminazione di elementi di un vettore +@cindex portabilit@`a @subentry eliminazione di elementi di un vettore @cindex Brennan, Michael La seguente istruzione fornisce un modo portabile, anche se non evidente, per svuotare un vettore:@footnote{Un ringraziamento a Michael @@ -18119,8 +18229,8 @@ Brennan per la segnalazione.} split("", vettore) @end example -@cindex @code{split()}, funzione, eliminazione di elementi di vettori -@cindex funzione @code{split()}, eliminazione di elementi di vettori +@cindex @code{split()} (funzione) @subentry eliminazione di elementi di vettori +@cindex funzione @subentry @code{split()} @subentry eliminazione di elementi di vettori La funzione @code{split()} (@pxref{Funzioni per stringhe}) dapprima svuota il vettore indicato. La chiamata chiede di dividere @@ -18146,9 +18256,9 @@ a = 3 * Visitare vettori multidimensionali:: Visitare vettori multidimensionali. @end menu -@cindex indici di vettori multidimensionali -@cindex vettori multidimensionali -@cindex multidimensionali, vettori +@cindex indici di vettore @subentry multidimensionale +@cindex vettori @subentry multidimensionali +@cindex multidimensionali @subentry vettori Un @dfn{vettore multidimensionale} @`e un vettore in cui un elemento @`e identificato da un insieme di indici invece che da un indice singolo. Per esempio, un vettore bidimenisonale richiede due indici. Il modo consueto (in @@ -18156,8 +18266,8 @@ molti linguaggi, compreso @command{awk}) per far riferimento a un elemento di un vettore multidimensionale chiamato @code{griglia} @`e con @code{griglia[@var{x},@var{y}]}. -@cindex @code{SUBSEP}, variabile, vettori multidimensionali e -@cindex variabile @code{SUBSEP}, vettori multidimensionali e +@cindex @code{SUBSEP} (variabile) @subentry vettori multidimensionali e +@cindex variabile @subentry @code{SUBSEP} @subentry vettori multidimensionali e I vettori multidimensionali sono resi disponibili in @command{awk} attraverso la concatenazione di pi@`u indici in una stringa; @command{awk} converte gli indici in stringhe @@ -18189,7 +18299,7 @@ possono portare a stringhe risultanti ambigue. Supponendo che @w{@samp{pippo["a", "b@@c"]}} risultano indistinguibili perch@'e entrambi sarebbero in realt@`a memorizzati come @samp{pippo["a@@b@@c"]}. -@cindex @code{in}, operatore, verificare se un elemento esiste in un vettore multidimensionale +@cindex @code{in} (operatore) @subentry verificare se un elemento esiste in un vettore multidimensionale Per verificare se una determinata sequenza di indici esiste in un vettore multidimensionale, si usa lo stesso operatore (@code{in}) che viene usato per i vettori monodimensionali. Si scrive l'intera sequenza di indici tra @@ -18258,9 +18368,9 @@ vettore ``multidimensionale''. Non ce ne pu@`o essere una, perch@'e vettori o elementi multidimensionali: c'@`e solo una modalit@`a multidimensionale per @emph{accedere} a un vettore. -@cindex indici di vettori multidimensionali, visitare gli -@cindex vettori, multidimensionali, visitare -@cindex visitare vettori multidimensionali +@cindex indici di vettore @subentry multidimensionale @subentry visitare gli +@cindex vettori @subentry multidimensionali @subentry visitare +@cindex visitare @subentry vettori multidimensionali Comunque, se un programma ha un vettore al quale si accede sempre in modalit@`a multidimensionale, si pu@`o ottenere il risultato di visitarlo combinando l'istruzione di visita @code{for} @@ -18304,7 +18414,7 @@ La sequenza originale degli indici separati @`e ripristinata. @node Vettori di vettori @section Vettori di vettori -@cindex vettori di vettori +@cindex vettori @subentry di vettori @command{gawk} migliora l'accesso ai vettori multidimensionali di @command{awk} standard e mette a disposizione dei veri vettori di vettori. @@ -18538,8 +18648,8 @@ di un vettore @`e esso stesso un sottovettore. @node Funzioni @chapter Funzioni -@cindex funzioni predefinite -@cindex predefinite, funzioni +@cindex funzione @subentry predefinita +@cindex predefinita @subentry funzione Questo @value{CHAPTER} descrive le funzioni predefinite di @command{awk}, che sono di tre tipi: numeriche, di stringa, e di I/O. @command{gawk} mette a disposizione ulteriori tipi di funzioni @@ -18601,8 +18711,8 @@ si scrive il nome della funzione seguito dai suoi argomenti racchiusi tra parentesi. Per esempio, @samp{atan2(y + z, 1)} @`e una chiamata alla funzione @code{atan2()} e ha due argomenti. -@cindex convenzioni di programmazione, nelle chiamate di funzione -@cindex spazio bianco, nelle chiamate di funzione +@cindex convenzioni di programmazione @subentry nelle chiamate di funzione +@cindex spazio bianco @subentry nelle chiamate di funzione La presenza di spazi bianchi tra il nome della funzione predefinita e la parentesi aperta @`e consentita, ma @`e buona norma quella di evitare di inserire spazi bianchi in quella posizione. @@ -18611,10 +18721,10 @@ fra nome funzione e aperta parentesi, ed @`e pi@`u semplice evitare errori seguendo una semplice convenzione che resta sempre valida: non inserire spazi dopo il nome di una funzione. -@cindex risoluzione di problemi, @command{gawk}, errori fatali@comma{} argomenti di funzione e -@cindex problemi, risoluzione di, @command{gawk}, errori fatali@comma{} argomenti di funzione e -@cindex @command{gawk}, argomenti di funzione e -@cindex differenze tra @command{awk} e @command{gawk}, argomenti di funzione (@command{gawk}) +@cindex risoluzione di problemi @subentry @command{gawk} @subentry errori fatali, argomenti di funzione e +@cindex problemi @subentry risoluzione di @subentry @command{gawk}, errori fatali, argomenti di funzione e +@cindex @command{gawk} @subentry argomenti di funzione e +@cindex differenze tra @command{awk} e @command{gawk} @subentry argomenti di funzione (@command{gawk}) Ogni funzione predefinita accetta un certo numero di argomenti. In alcuni casi, gli argomenti possono essere omessi. I valori di default per gli argomenti omessi variano @@ -18634,9 +18744,9 @@ i = 4 j = sqrt(i++) @end example -@cindex ordine di valutazione, funzioni -@cindex funzioni predefinite, ordine di valutazione -@cindex predefinite, funzioni, ordine di valutazione +@cindex ordine di valutazione @subentry funzioni +@cindex funzioni @subentry predefinite @subentry ordine di valutazione +@cindex predefinita @subentry funzione @subentry ordine di valutazione @noindent la variabile @code{i} @`e incrementata al valore cinque prima di chiamare la funzione @code{sqrt()} alla quale viene fornito come parametro il valore @@ -18659,8 +18769,8 @@ funzione @code{atan2()} @`e chiamata con i due argomenti 11 e 10. @node Funzioni numeriche @subsection Funzioni numeriche -@cindex funzioni numeriche -@cindex numeriche, funzioni +@cindex funzioni @subentry numeriche +@cindex numeriche @subentry funzioni La seguente lista descrive tutte le funzioni predefinite che hanno a che fare con i numeri. @@ -18691,7 +18801,7 @@ uso. @item @code{int(@var{x})} @cindexawkfunc{int} -@cindex arrotondamento all'intero pi@`u vicino +@cindex arrotondare @subentry all'intero pi@`u vicino Restituisce l'intero pi@`u vicino a @var{x}, situato tra @var{x} e zero, troncato togliendo i decimali. Per esempio, @code{int(3)} @`e 3, @code{int(3.9)} @`e 3, @code{int(-3.9)} @@ -18700,7 +18810,7 @@ Per esempio, @code{int(3)} @`e 3, @code{int(3.9)} @`e 3, @code{int(-3.9)} @ifset INTDIV @item @code{intdiv0(@var{numeratore}, @var{denominatore}, @var{risultato})} @cindexawkfunc{intdiv0} -@cindex funzione @code{intdiv0} +@cindex funzione @subentry @code{intdiv0} Esegue una divisione tra numeri interi, simile alla funzione standard C @code{div}. Dapprima, il @code{numeratore} e il @code{denominatore} vengono troncati, eliminando la parte decimale, @@ -18735,7 +18845,7 @@ sia negativo. @cindex Beebe, Nelson H.F.@: @item @code{rand()} @cindexawkfunc{rand} -@cindex numeri casuali, funzioni @code{rand()}/@code{srand()} +@cindex numeri @subentry casuali @subentry funzioni @code{rand()}/@code{srand()} Restituisce un numero casuale. I valori di @code{rand()} sono uniformemente distribuiti tra zero e uno. Il valore potrebbe essere zero ma non @`e mai uno.@footnote{La versione C di @@ -18784,9 +18894,9 @@ function roll(n) @{ return 1 + int(rand() * n) @} @} @end example -@cindex inizializzazione generazione di numeri casuali -@cindex numeri casuali, inizializzazione generazione di -@cindex numeri casuali, seme di +@cindex inizializzazione @subentry della generazione di numeri casuali +@cindex numeri @subentry casuali @subentry inizializzazione della generazione di +@cindex numeri @subentry casuali @subentry seme di @quotation ATTENZIONE Nella maggior parte delle implementazioni di @command{awk}, compreso @command{gawk}, @@ -18850,7 +18960,7 @@ a seconda delle implementazioni @command{awk}. @node Funzioni per stringhe @subsection Funzioni di manipolazione di stringhe -@cindex funzioni di manipolazione di stringhe +@cindex funzioni @subentry di manipolazione di stringhe Le funzioni in questa @value{SECTION} leggono o modificano il testo di una o pi@`u stringhe. @@ -18898,13 +19008,13 @@ compatibile (@pxref{Opzioni}): @item @code{asort(}@var{sorgente} [@code{,} @var{destinazione} [@code{,} @var{come} ] ]@code{) #} @itemx @code{asorti(}@var{sorgente} [@code{,} @var{destinazione} [@code{,} @var{come} ] ]@code{) #} @cindexgawkfunc{asorti} -@cindex vettori, ordinamento dei -@cindex ordinamento di vettori -@cindex vettori, determinare il numero degli elementi +@cindex vettori @subentry ordinamento +@cindex ordinamento @subentry di vettori +@cindex vettori @subentry determinare il numero degli elementi @cindexgawkfunc{asort} -@cindex ordinamento vettori per indici -@cindex vettori, ordinamento per indici -@cindex indici di vettori, ordinamento per +@cindex ordinamento @subentry di vettori @subentry in base agli indici +@cindex vettori @subentry ordinamento @subentry in base agli indici +@cindex indici di vettore @subentry ordinamento in base agli Queste due funzioni sono abbastanza simili, e quindi sono descritte insieme. @@ -18924,7 +19034,7 @@ opzionale @var{destinazione}, @var{sorgente} @`e copiato in @var{destinazione}. @var{destinazione} viene quindi ordinato, lasciando immodificati gli indici di @var{sorgente}. -@cindex @command{gawk}, variabile @code{IGNORECASE} in +@cindex @command{gawk} @subentry variabile @subentry @code{IGNORECASE} in Nel confronto tra stringhe, la variabile @code{IGNORECASE} influenza l'ordinamento (@pxref{Funzioni di ordinamento di vettori}). Se il vettore @@ -19029,8 +19139,8 @@ In questo caso, @code{$0} @`e la stringa obiettivo di default. @code{gensub()} restituisce la nuova stringa come risultato, e questa @`e passata direttamente a @code{print} per essere stampata. -@c @cindex avvertimenti automatici -@c @cindex automatici, avvertimenti +@c @cindex automatic warnings +@c @cindex warnings, automatic Se l'argomento @var{come} @`e una stringa che non inizia con @samp{g} o @samp{G}, o se @`e un numero minore o uguale a zero, si effettua solo una sostituzione. Se @var{come} @`e zero, @command{gawk} emette @@ -19065,8 +19175,8 @@ e il terzo argomento dev'essere modificabile. @item @code{index(@var{dove}, @var{cosa})} @cindexawkfunc{index} -@cindex ricerca in stringhe -@cindex trovare sottostringhe in una stringa +@cindex ricerca @subentry in stringhe +@cindex trovare @subentry sottostringhe in una stringa Ricerca nella stringa @var{dove} la prima occorrenza della stringa @var{cosa}, e restituisce la posizione in caratteri dell'inizio di quest'occorrenza nella stringa @var{dove}. Si consideri il seguente esempio: @@ -19079,7 +19189,7 @@ $ @kbd{awk 'BEGIN @{ print index("noccioline", "oli") @}'} @noindent Se @var{cosa} non viene trovato, @code{index()} restituisce zero. -@cindex angolo buio, @dfn{regexp} come secondo argomento di @code{index()} +@cindex angolo buio @subentry @dfn{regexp} come secondo argomento di @code{index()} In BWK @command{awk} e @command{gawk}, @`e un errore fatale usare una costante @dfn{regexp} per @var{cosa}. Altre implementazioni lo consentono, considerando semplicemente @@ -19088,8 +19198,8 @@ la costante @dfn{regexp} come un'espressione che significa @item @code{length(}[@var{stringa}]@code{)} @cindexawkfunc{length} -@cindex stringa, lunghezza di una -@cindex lunghezza di una stringa +@cindex stringa @subentry lunghezza di una +@cindex lunghezza @subentry di una stringa Restituisce il numero di caratteri in @var{stringa}. Se @var{stringa} @`e un numero, viene restituita la lunghezza della stringa di cifre che rappresenta quel numero. Per esempio, @code{length("abcde")} @`e @@ -19109,14 +19219,14 @@ Invece, @code{length(15 * 35)} restituisce tre. In questo esempio, e 525 @`e quindi convertito alla stringa @code{"525"}, che @`e composta da tre caratteri. -@cindex lunghezza di un record in input -@cindex record in input, lunghezza di un +@cindex lunghezza @subentry di un record in input +@cindex record @subentry in input, lunghezza di un Se non si specifica alcun argomento, @code{length()} restituisce la lunghezza di @code{$0}. @c @cindex historical features -@cindex portabilit@`a, funzione @code{length()} -@cindex POSIX @command{awk}, funzione @code{length()} e +@cindex portabilit@`a @subentry funzione @code{length()} +@cindex POSIX @command{awk} @subentry @code{length()} (funzione) @quotation NOTA In alcune delle prime versioni di @command{awk}, la funzione @code{length()} poteva essere richiamata senza alcuna parentesi. Farlo @`e considerata @@ -19125,7 +19235,7 @@ per compatibilit@`a con la vecchia prassi. Per garantire la massima portabilit@`a ai programmi, @`e meglio mettere sempre le parentesi. @end quotation -@cindex angolo buio, funzione @code{length()} +@cindex angolo buio @subentry funzione @subentry @code{length()} Se @code{length()} @`e chiamata con una variabile che non @`e stata usata, @command{gawk} considera la variabile come uno scalare. Altre implementazioni di @command{awk} non assegnano nessun tipo alla variabile. @@ -19147,11 +19257,11 @@ Se @option{--lint} @`e stato specificato sulla riga di comando, @command{gawk} emette un avvertimento a questo riguardo. -@cindex estensioni comuni, @code{length()} applicato a un vettore -@cindex comuni, estensioni@comma{} @code{length()} applicato a un vettore -@cindex differenze tra @command{gawk} e @command{awk}, funzione @code{length()} -@cindex numero di elementi di un vettore -@cindex vettore, determinare il numero degli elementi +@cindex estensioni comuni @subentry @code{length()} applicato a un vettore +@cindex comuni @subentry estensioni @subentry @code{length()} applicato a un vettore +@cindex differenze tra @command{awk} e @command{gawk} @subentry funzione @code{length()} +@cindex numero @subentry di elementi in un vettore +@cindex vettori @subentry determinare il numero degli elementi In @command{gawk} e in parecchie altre implementazioni @command{awk}, se l'argomento @`e un vettore, la funzione @code{length()} restituisce il numero di elementi nel vettore. @value{COMMONEXT} @@ -19174,8 +19284,8 @@ argomento genera un errore fatale @item @code{match(@var{stringa}, @var{regexp}} [@code{, @var{vettore}}]@code{)} @cindexawkfunc{match} -@cindex stringa, ricercare espressioni regolari in una -@cindex ricerca @dfn{regexp} in stringhe +@cindex stringa @subentry ricercare espressioni regolari in una +@cindex ricerca @subentry @dfn{regexp} in stringhe Ricerca in @var{stringa} la sottostringa pi@`u lunga, a partire da sinistra, che corrisponde all'espressione regolare @var{regexp} e restituisce la posizione @@ -19197,12 +19307,15 @@ trattano stringhe e che hanno a che fare con espressioni regolari, come per @code{match()}, l'ordine @`e lo stesso che per l'operatore @samp{~} : @samp{@var{stringa} ~ @var{regexp}}. -@cindex @code{RSTART}, variabile, funzione @code{match()} e -@cindex variabile @code{RSTART}, funzione @code{match()} e -@cindex @code{RLENGTH}, variabile, funzione @code{match()} e -@cindex variabile @code{RLENGTH}, funzione @code{match()} e -@cindex funzione @code{match()}, variabili @code{RSTART}/@code{RLENGTH} -@cindex @code{match()}, funzione, variabili @code{RSTART}/@code{RLENGTH} +@cindex @code{RSTART} (variabile) @subentry funzione @code{match()} e +@cindex variabile @subentry @code{RSTART} @subentry funzione @code{match()} e +@cindex @code{RLENGTH} (variabile) @subentry funzione @code{match()} e +@cindex variabile @subentry @code{RLENGTH} @subentry funzione @code{match()} e +@cindex funzione @subentry @code{match()} @subentry variabili @code{RSTART}/@code{RLENGTH} +@cindex funzione @subentry @code{match()} @subentry effetti collaterali +@cindex @code{match()} (funzione) @subentry variabili @code{RSTART}/@code{RLENGTH} +@cindex @code{match()} (funzione) @subentry effetti collaterali +@cindex effetti collaterali @subentry funzione @subentry @code{match()} La funzione @code{match()} imposta la variabile predefinita @code{RSTART} all'indice. Imposta anche la variabile predefinita @code{RLENGTH} alla @@ -19254,7 +19367,7 @@ Corrispondenza di or+e alla posiz. 19 in Il mio programma corre Corrispondenza di Melvin alla posiz. 1 in Melvin @`e passato da qui. @end example -@cindex differenze tra @command{awk} e @command{gawk}, funzione @code{match()} +@cindex differenze tra @command{awk} e @command{gawk} @subentry funzione @code{match()} Se @var{vettore} esiste gi@`a, viene cancellato, e quindi l'elemento numero zero di @var{vettore} @`e impostato all'intera parte di @var{stringa} individuata da @var{regexp}. Se @var{regexp} contiene parentesi, @@ -19293,8 +19406,8 @@ fra parentesi, perch@'e non tutte potrebbero aver individuato del testo; quindi, andrebbero esaminati usando l'operatore @code{in} (@pxref{Visitare elementi}). -@cindex risoluzione di problemi, funzione @code{match()} -@cindex problemi, risoluzione di, funzione @code{match()} +@cindex risoluzione di problemi @subentry funzione @code{match()} +@cindex problemi @subentry risoluzione di @subentry funzione @code{match()} L'argomento @var{vettore} di @code{match()} @`e un'estensione @command{gawk}. In modalit@`a compatibile (@pxref{Opzioni}), @@ -19363,7 +19476,7 @@ split("cul-de-sac", a, "-", separatori) @end example @noindent -@cindex stringhe, divisione, esempio +@cindex stringa @subentry divisione @subentry esempio divide la stringa @code{"cul-de-sac"} in tre campi usando @samp{-} come separatore. Il vettore @code{a} ha i seguenti contenuti: @@ -19383,7 +19496,7 @@ seps[2] = "-" @noindent Il valore restituito da questa chiamata a @code{split()} @`e tre. -@cindex differenze tra @command{awk} e @command{gawk}, funzione @code{split()} +@cindex differenze tra @command{awk} e @command{gawk} @subentry funzione @code{split()} Come nella divisione in campi dei record in input, quando il valore di @var{separacampo} @`e @w{@code{" "}}, gli spazi bianchi a inizio e fine stringa vengono ignorati nell'assegnare valori agli elementi di @var{vettore} ma non nel @@ -19402,7 +19515,7 @@ Anche se @samp{RS = ""} fa s@`{@dotless{i}} che il carattere di ritorno a capo s separatore di campo, questo non influenza il modo in cui @code{split()} divide le stringhe. -@cindex angolo buio, funzione @code{split()} +@cindex angolo buio @subentry funzione @subentry @code{split()} Recenti implementazioni di @command{awk}, incluso @command{gawk}, consentono che il terzo argomento sia una costante @dfn{regexp} (@w{@code{/}@dots{}@code{/}}) @@ -19426,12 +19539,13 @@ non @`e la stringa nulla), @var{vettore} ha solo un elemento. Il valore di quell'elemento @`e la @var{stringa} originale. -In modalit@`a POSIX (@pxref{Opzioni}), il quarto argomento non @`e disponibile. +@cindex modalit@`a POSIX +In modalit@`a POSIX (@pxref{Opzioni}), il quarto argomento non @`e consentito. @item @code{sprintf(@var{formato}, @var{espressione1}, @dots{})} @cindexawkfunc{sprintf} -@cindex formattare stringhe -@cindex stringhe, formattazione +@cindex formattare @subentry stringhe +@cindex stringa @subentry formattazione Restituisce (senza stamparla) la stringa che @code{printf} avrebbe stampato con gli stessi argomenti (@pxref{Printf}). @@ -19445,8 +19559,8 @@ pival = sprintf("pi = %.2f (approx.)", 22/7) assegna la stringa @w{@samp{pi = 3.14 (approx.)}} alla variabile @code{pival}. @cindexgawkfunc{strtonum} -@cindex conversione di una stringa in un numero -@cindex stringhe, conversione in numeri +@cindex conversione @subentry da stringa a numero +@cindex stringa @subentry conversione in numero @item @code{strtonum(@var{stringa}) #} Esamina @var{stringa} e restituisce il suo valore numerico. Se @var{stringa} inizia con la cifra @samp{0}, @code{strtonum()} presuppone @@ -19475,8 +19589,8 @@ localizzazione corrente per riconoscere i numeri @item @code{sub(@var{regexp}, @var{rimpiazzo}} [@code{, @var{obiettivo}}]@code{)} @cindexawkfunc{sub} -@cindex rimpiazzare in una stringa -@cindex stringa, rimpiazzare in una +@cindex rimpiazzare @subentry caratteri in una stringa +@cindex stringa @subentry rimpiazzare in una Ricerca in @var{obiettivo}, che @`e visto come una stringa, la prima sottostringa pi@`u lunga possibile, a partire da sinistra, che corrisponde all'espressione regolare @var{regexp}. @@ -19558,10 +19672,10 @@ ogni riga con un @samp{&}: @{ sub(/\|/, "\\&"); print @} @end example -@cindex @code{sub()}, funzione, argomenti di -@cindex funzione @code{sub()}, argomenti di -@cindex @code{gsub()}, funzione, argomenti di -@cindex funzione @code{gsub()}, argomenti di +@cindex @code{sub()} (funzione) @subentry argomenti di +@cindex funzione @subentry @code{sub()} @subentry argomenti di +@cindex @code{gsub()} (funzione) @subentry argomenti di +@cindex funzione @subentry @code{gsub()} @subentry argomenti di Come gi@`a accennato, il terzo argomento di @code{sub()} dev'essere una variabile, un campo, o un elemento di vettore. Alcune versioni di @command{awk} accettano come terzo argomento @@ -19576,8 +19690,8 @@ sub(/USA/, "Stati Uniti", "gli USA e il Canada") @end example @noindent -@cindex risoluzione di problemi, funzioni @code{gsub()}/@code{sub()} -@cindex problemi, risoluzione di, funzioni @code{gsub()}/@code{sub()} +@cindex risoluzione di problemi @subentry funzioni @code{gsub()}/@code{sub()} +@cindex problemi @subentry risoluzione di @subentry funzioni @code{gsub()}/@code{sub()} Per compatibilit@`a storica, @command{gawk} accetta un tale codice erroneo. Tuttavia, l'uso di qualsiasi altra espressione non modificabile come terzo parametro causa un errore fatale, e il programma @@ -19604,7 +19718,7 @@ suffisso @`e restituito anche se @var{lunghezza} @`e maggiore del numero di caratteri disponibili nella stringa, a partire dal carattere @var{inizio}. -@cindex Brian Kernighan, @command{awk} di +@cindex Brian Kernighan @subentry @command{awk} di Se @var{inizio} @`e minore di uno, @code{substr()} lo tratta come se fosse uno. (POSIX non specifica cosa fare in questo caso: BWK @command{awk} si comporta cos@`{@dotless{i}}, e quindi @command{gawk} fa lo stesso.) @@ -19613,8 +19727,8 @@ nella stringa, @code{substr()} restituisce la stringa nulla. Analogamente, se @var{lunghezza} @`e presente ma minore o uguale a zero, viene restituita la stringa nulla. -@cindex risoluzione di problemi, funzione @code{substr()} -@cindex problemi, risoluzione di, funzione @code{substr()} +@cindex risoluzione di problemi @subentry funzione @code{substr()} +@cindex problemi @subentry risoluzione di @subentry funzione @code{substr()} La stringa restituita da @code{substr()} @emph{non pu@`o} essere assegnata. Quindi, @`e un errore tentare di modificare una porzione di una stringa, come si vede nel seguente esempio: @@ -19633,7 +19747,7 @@ di @code{sub()} o @code{gsub()}: gsub(/xyz/, "pdq", substr($0, 5, 20)) # SBAGLIATO @end example -@cindex portabilit@`a, funzione @code{substr()} +@cindex portabilit@`a @subentry funzione @code{substr()} (Alcune versioni commerciali di @command{awk} consentono un tale uso di @code{substr()}, ma un tale codice non @`e portabile.) @@ -19647,11 +19761,11 @@ stringa = "abcdef" stringa = substr(stringa, 1, 2) "CDE" substr(stringa, 6) @end example -@cindex maiuscolo/minuscolo, conversione da/a -@cindex stringhe, convertire maiuscolo/minuscolo +@cindex maiuscolo/minuscolo @subentry conversione da/a +@cindex stringa @subentry conversione maiuscolo/minuscolo @item @code{tolower(@var{stringa})} @cindexawkfunc{tolower} -@cindex convertire stringa in minuscolo +@cindex conversione @subentry di stringa in minuscolo Restituisce una copia di @var{stringa}, con ogni carattere maiuscolo nella stringa rimpiazzato dal suo corrispondente carattere minuscolo. I caratteri non alfabetici non vengono modificati. Per esempio, @@ -19660,7 +19774,7 @@ I caratteri non alfabetici non vengono modificati. Per esempio, @item @code{toupper(@var{stringa})} @cindexawkfunc{toupper} -@cindex convertire stringa in maiuscolo +@cindex conversione @subentry di stringa in maiuscolo Restituisce una copia di @var{stringa}, con ogni carattere minuscolo nella stringa rimpiazzato dal suo corrispondente carattere maiuscolo. I caratteri non alfabetici non vengono modificati. Per esempio, @@ -19669,10 +19783,10 @@ I caratteri non alfabetici non vengono modificati. Per esempio, @end table @sidebar Individuare la stringa nulla -@cindex individuare la stringa nulla -@cindex stringa nulla, individuare la -@cindex @code{*} (asterisco), operatore @code{*}, individuare la stringa nulla -@cindex asterisco (@code{*}), operatore @code{*}, individuare la stringa nulla +@cindex individuare @subentry la stringa nulla +@cindex stringa nulla @subentry individuare la +@cindex @code{*} (asterisco) @subentry operatore @code{*} @subentry individuare la stringa nulla +@cindex asterisco (@code{*}) @subentry operatore @code{*} @subentry individuare la stringa nulla In @command{awk}, l'operatore @samp{*} pu@`o individuare la stringa nulla. Questo @`e particolarmente importante per le funzioni @code{sub()}, @@ -19692,16 +19806,16 @@ Sebbene questo sia abbastanza sensato, pu@`o suscitare una certa sorpresa. @subsubsection Ulteriori dettagli su @samp{\} e @samp{&} con @code{sub()}, @code{gsub()} e @code{gensub()} @cindex protezione caratteri nelle funzioni @code{gsub()}/@code{gensub()}/@code{sub()} -@cindex funzione @code{sub()}, protezione caratteri -@cindex @code{sub()}, funzione, protezione caratteri -@cindex funzione @code{gsub()}, protezione caratteri -@cindex @code{gsub()}, funzione, protezione caratteri -@cindex funzione @code{gensub()} (@command{gawk}), protezione caratteri -@cindex @code{gensub()}, funzione (@command{gawk}), protezione caratteri -@cindex @code{\} (barra inversa), @code{gsub()}/@code{gensub()}/@code{sub()} funzioni e -@cindex barra inversa (@code{\}), @code{gsub()}/@code{gensub()}/@code{sub()} funzioni e -@cindex @code{&} (e commerciale), funzioni @code{gsub()}/@code{gensub()}/@code{sub()} e -@cindex e commerciale (@code{&}), funzioni @code{gsub()}/@code{gensub()}/@code{sub()} e +@cindex funzione @subentry @code{sub()} @subentry protezione caratteri +@cindex @code{sub()} (funzione) @subentry protezione caratteri +@cindex funzione @subentry @code{gsub()} @subentry protezione caratteri +@cindex @code{gsub()} (funzione) @subentry protezione caratteri +@cindex funzione @subentry @code{gensub()} (@command{gawk}) @subentry protezione caratteri +@cindex @code{gensub()} (funzione @command{gawk}) @subentry protezione caratteri +@cindex @code{\} (barra inversa) @subentry @code{gsub()}/@code{gensub()}/@code{sub()} funzioni e +@cindex barra inversa (@code{\}) @subentry @code{gsub()}/@code{gensub()}/@code{sub()} funzioni e +@cindex @code{&} (e commerciale) @subentry funzioni @code{gsub()}/@code{gensub()}/@code{sub()} e +@cindex e commerciale (@code{&}) @subentry funzioni @code{gsub()}/@code{gensub()}/@code{sub()} e @quotation ATTENZIONE Si dice che questa sottosezione possa causare dei mal di testa. @@ -19720,7 +19834,7 @@ Poi c'@`e il momento dell'esecuzione, quello in cui @command{awk} esamina effettivamente la stringa da sostituire, per determinare cosa fare. -@cindex Brian Kernighan, @command{awk} di +@cindex Brian Kernighan @subentry @command{awk} di In entrambi i livelli, @command{awk} ricerca un dato insieme di caratteri che possono venire dopo una barra inversa. A livello lessicale, cerca le sequenze di protezione @@ -19876,7 +19990,7 @@ di quel che ci si attendeva. Inoltre, la proposta del manutentore di regole finali risultanti sono un po' pi@`u semplici. I risultati sono simili, tranne che in un caso. -@cindex POSIX @command{awk}, funzioni @code{gsub()}/@code{sub()} e +@cindex POSIX @command{awk} @subentry @code{gsub()}/@code{sub()} (funzioni) Le regole POSIX stabiliscono che @samp{\&} nella stringa di rimpiazzo produca il carattere @samp{&}, @samp{\\} produce il carattere @samp{\}, e che @samp{\} seguito da qualsiasi carattere non @`e speciale; la @samp{\} @@ -20011,8 +20125,8 @@ da fare delle sostituzioni. @node Funzioni di I/O @subsection Funzioni di Input/Output -@cindex input/output, funzioni di -@cindex funzioni di input/output +@cindex input/output @subentry funzioni di +@cindex funzioni @subentry di input/output Le seguenti funzioni riguardano l'input/output (I/O). I parametri opzionali sono racchiusi tra parentesi quadre ([ ]): @@ -20020,7 +20134,7 @@ I parametri opzionali sono racchiusi tra parentesi quadre ([ ]): @table @asis @item @code{close(}@var{nome_file} [@code{,} @var{come}]@code{)} @cindexawkfunc{close} -@cindex file, chiusura +@cindex file @subentry chiusura di @cindex chiudere un file o un coprocesso Chiude il file @var{nome_file} in input o in output. Alternativamente, l'argomento pu@`o essere un comando della shell usato per creare un @@ -20051,10 +20165,10 @@ Scrive su disco ogni output contenuto in memoria, associato con file aperto in scrittura o un comando della shell che ridirige output a una @dfn{pipe} o a un coprocesso. -@cindex buffer, scrivere su disco un -@cindex memoria tampone, scrivere su disco -@cindex output, bufferizzazione -@cindex output, nella memoria tampone (buffer) +@cindex buffer @subentry scrivere su disco un +@cindex memoria tampone @subentry scrivere su disco +@cindex output @subentry bufferizzazione +@cindex output @subentry nella memoria tampone (buffer) Molti programmi di utilit@`a @dfn{bufferizzano} il loro output (cio@`e, accumulano in memoria record da scrivere in un file su disco o sullo schermo, fin quando non arriva il momento giusto per inviare i @@ -20068,8 +20182,8 @@ Questo @`e lo scopo della funzione @code{fflush()}; anche @command{gawk} scrive il suo output in un buffer, e la funzione @code{fflush()} forza @command{gawk} a svuotare i suoi buffer. -@cindex estensioni comuni, funzione @code{fflush()} -@cindex Brian Kernighan, @command{awk} di +@cindex estensioni comuni @subentry funzione @code{fflush()} +@cindex Brian Kernighan @subentry @command{awk} di Brian Kernighan ha aggiunto @code{fflush()} al suo @command{awk} nell'aprile 1992. Per due decenni @`e rimasta un'estensione comune. A Dicembre 2012 @`e stata accettata e inclusa nello standard POSIX. @@ -20098,8 +20212,8 @@ buffer dello standard output. @c @cindex automatic warnings @c @cindex warnings, automatic -@cindex risoluzione di problemi, funzione @code{fflush()} -@cindex problemi, risoluzione di, funzione @code{fflush()} +@cindex risoluzione di problemi @subentry funzione @code{fflush()} +@cindex problemi @subentry risoluzione di @subentry funzione @code{fflush()} @code{fflush()} restituisce zero se il buffer @`e svuotato con successo; altrimenti, restituisce un valore diverso da zero. (@command{gawk} restituisce @minus{}1.) @@ -20118,7 +20232,7 @@ in tal caso, @code{fflush()} restituisce ancora @minus{}1. @end table @sidebar Bufferizzazione interattiva e non interattiva -@cindex bufferizzazione, interattiva vs.@: non interattiva +@cindex bufferizzazione @subentry interattiva vs.@: non interattiva A complicare ulteriormente le cose, i problemi di bufferizzazione possono peggiorare se il programma eseguito @@ -20167,7 +20281,7 @@ In questo caso, nessun output viene stampato finch@'e non @`e stato battuto il @table @asis @item @code{system(@var{comando})} @cindexawkfunc{system} -@cindex chiamare comandi di shell +@cindex chiamare @subentry comando di shell @cindex interagire con altri programmi Esegue il comando del sistema operativo @var{comando} e quindi ritorna al programma @command{awk}. @@ -20199,10 +20313,10 @@ close("/bin/sh") @end example @noindent -@cindex risoluzione di problemi, funzione @code{system()} -@cindex problemi, risoluzione di, funzione @code{system()} -@cindex @option{--sandbox}, opzione, disabilitare la funzione @code{system()} -@cindex opzione @option{--sandbox}, disabilitare la funzione @code{system()} +@cindex risoluzione di problemi @subentry funzione @code{system()} +@cindex problemi @subentry risoluzione di @subentry funzione @code{system()} +@cindex @option{--sandbox} (opzione) @subentry disabilitare la funzione @code{system()} +@cindex opzione @subentry @option{--sandbox} @subentry disabilitare la funzione @code{system()} Tuttavia, nel caso che il programma @command{awk} sia interattivo, @code{system()} @`e utile per eseguire grossi programmi autonomi, come ad esempio la shell o un programma di modifica testi. @@ -20257,10 +20371,10 @@ A partire dalla versione di agosto 2018, BWK @command{awk} si comporta come @command{gawk} per il codice di ritorno della chiamata @code{system()}. @sidebar Controllare la bufferizzazione dell'output con @code{system()} -@cindex buffer, scrivere su disco un -@cindex bufferizzazione, dell'input/output -@cindex output, bufferizzazione -@cindex bufferizzazione, dell'output +@cindex buffer @subentry scrivere su disco un +@cindex bufferizzazione @subentry dell'input/output +@cindex output @subentry bufferizzazione +@cindex bufferizzazione @subentry dell'output La funzione @code{fflush()} consente un controllo esplicito sulla bufferizzazione dell'output per singoli file e @dfn{pipe}. @@ -20321,15 +20435,15 @@ invocare @code{system()}, l'output sarebbe quest'ultimo (quello non voluto). @node Funzioni di tempo @subsection Funzioni per gestire marcature temporali -@cindex funzioni di tempo +@cindex funzioni @subentry di tempo @cindex marcature temporali -@cindex data e ora, si veda marcature temporali -@cindex @dfn{log} (registro), file di, marcature temporali nei -@cindex registro (@dfn{log}), file di, marcature temporali nel -@cindex file di registro (@dfn{log}), marcature temporali nei -@cindex @command{gawk}, data e ora (marcature temporali) -@cindex POSIX @command{awk}, marcature temporali e +@cindex data e ora @subentry @seealso{marcature temporali} +@cindex @dfn{log} (registro) @subentry file di @subentry marcature temporali nei +@cindex registro (@dfn{log}) @subentry file di @subentry marcature temporali nel +@cindex file @subentry di registro (@dfn{log}) @subentry marcature temporali nei +@cindex @command{gawk} @subentry data e ora (marcature temporali) +@cindex POSIX @command{awk} @subentry marcature temporali I programmi @command{awk} sono frequentemente usati per elaborare file di registro [file con estensione .log], che contengono l'informazione sulla data e l'ora (marcatura temporale) in cui un particolare record @`e stato registrato sul log. @@ -20368,9 +20482,9 @@ il che @`e sufficiente per rappresentare date e ore fino a inizio 2038 di date, compresi dei valori negativi per rappresentare delle date anteriori all'Epoca. -@cindex @command{date}, programma di utilit@`a GNU -@cindex programma di utilit@`a @command{date} GNU -@cindex tempo, ottenerlo +@cindex @command{date} (programma di utilit@`a GNU) +@cindex programma di utilit@`a GNU @subentry @command{date} +@cindex tempo @subentry ottenerlo Per facilitare l'elaborazione di tali file di registro, e per produrre dei rapporti utili, @command{gawk} prevede le seguenti funzioni per lavorare con le marcature temporali. Si tratta di estensioni @command{gawk}; @@ -20416,15 +20530,15 @@ Se @var{specifiche_data} non contiene elementi in numero sufficiente, o se la data e ora risultante sono fuori dall'intervallo previsto, @code{mktime()} restituisce @minus{}1. -@cindex @command{gawk}, vettore @code{PROCINFO} in -@cindex @code{PROCINFO}, vettore -@cindex vettore @code{PROCINFO} +@cindex @command{gawk} @subentry vettore @subentry @code{PROCINFO} in +@cindex @code{PROCINFO} (vettore) +@cindex vettore @subentry @code{PROCINFO} @item @code{strftime(}[@var{formato} [@code{,} @var{data_e_ora} [@code{,} @var{utc}] ] ]@code{)} @cindexgawkfunc{strftime} -@cindex formato stringa marcature temporali -@cindex formato stringa data e ora -@cindex data e ora, formato stringa -@cindex marcature temporali, formato stringa +@cindex formato @subentry stringa @subentry marcature temporali +@cindex formato @subentry stringa @subentry data e ora +@cindex data e ora @subentry formato stringa +@cindex marcature temporali @subentry formato stringa Formatta la data e ora specificata da @var{data_e_ora} in base alle indicazioni contenute nella stringa @var{formato} e restituisce il risultato. @`E simile alla funzione omonima in ISO C. @@ -20450,8 +20564,8 @@ la lista che segue per le varie direttive di formattazione. @item @code{systime()} @cindexgawkfunc{systime} @cindex marcature temporali -@cindex data e ora, si veda marcature temporali -@cindex data e ora corrente del sistema +@cindex data e ora @subentry @seealso{marcature temporali} +@cindex data e ora @subentry corrente del sistema Restituisce l'ora corrente come numero di secondi a partire dall'Epoca del sistema. Sui sistemi aderenti allo standard POSIX, questo @`e il numero di secondi trascorsi a partire dal primo gennaio 1970, ora di Greenwich @@ -20464,9 +20578,9 @@ determinare quanto tempo prima un particolare record @`e stato registrato. @`E anche possibile produrre record di registro usando il formato ``secondi a partire dall'Epoca''. -@cindex conversione di date in marcature temporali -@cindex date, conversione in marcature temporali -@cindex marcature temporali, conversione date nelle +@cindex conversione @subentry di date in marcature temporali +@cindex date @subentry conversione in marcature temporali +@cindex marcature temporali @subentry conversione date nelle La funzione @code{mktime()} consente di convertire una rappresentazione in forma testuale di una data e ora in una marcatura temporale. Questo semplifica i confronti prima/dopo tra differenti date e ore, in @@ -20480,8 +20594,8 @@ letteralmente ci@`o che non @`e una specifica di formato nella stringa che viene restituita, mentre sostituisce i valori di data e ora a seconda delle specifiche di formato contenute nella stringa @var{formato}. -@cindex specificatori di formato, funzione @code{strftime()} di (@command{gawk}) -@cindex formato, specificatori di, funzione @code{strftime()} di (@command{gawk}) +@cindex specificatori di formato @subentry funzione @code{strftime()} di @command{gawk} +@cindex formato @subentry specificatori di @subentry funzione @code{strftime()} di @command{gawk} Per @code{strftime()} lo standard 1999 ISO C@footnote{Sfortunatamente, non tutte le funzioni @code{strftime()} dei vari sistemi operativi @@ -20587,7 +20701,7 @@ Luned@`{@dotless{i}} @`e il giorno numero 1. Il numero di settimana dell'anno (con la prima domenica dell'anno presa come primo giorno della prima settimana) come numero decimale (00--53). -@c @cindex ISO 8601 +@cindex ISO @subentry 8601 (standard per marcature temporali) @item %V Il numero di settimana dell'anno (con il primo luned@`{@dotless{i}} dell'anno preso come primo giorno della prima settimana) come numero decimale (01--53). @@ -20698,9 +20812,9 @@ La data in formato VMS (p.es., @samp{20-JUN-1991}). In aggiunta a ci@`o, le notazioni alternative sono riconosciute, ma al loro posto sono usate quelle normali. -@cindex @code{date}, programma di utilit@`a POSIX -@cindex programma di utilit@`a POSIX @code{date} -@cindex POSIX @command{awk}, programma di utilit@`a @code{date} e +@cindex @code{date} (programma di utilit@`a POSIX) +@cindex programma di utilit@`a POSIX @subentry @code{date} +@cindex POSIX @command{awk} @subentry @code{date} (programma di utilit@`a) Il seguente esempio @`e un'implementazione @command{awk} del programma di utilit@`a POSIX @command{date}. Normalmente, il programma di utilit@`a @command{date} stampa la @@ -20750,14 +20864,17 @@ gawk 'BEGIN @{ @node Funzioni a livello di bit @subsection Funzioni per operazioni di manipolazione bit -@cindex bit, funzioni per la manipolazione di -@cindex manipolazione di bit, funzioni per la -@cindex funzioni per la manipolazione di bit -@cindex bit, operazioni sui -@cindex AND, operazione sui bit -@cindex OR, operazione sui bit -@cindex XOR, operazione sui bit -@cindex operazioni sui bit +@cindex bit @subentry funzioni per la manipolazione di +@cindex manipolazione di bit @subentry funzioni per la +@cindex funzioni @subentry per la manipolazione di bit +@cindex bit @subentry operazioni sui +@cindex AND (operazione sui bit) +@cindex operazione sui bit @subentry AND +@cindex OR (operazione sui bit) +@cindex operazione sui bit @subentry OR +@cindex XOR (operazione sui bit) +@cindex operazione sui bit @subentry XOR +@cindex operazione sui bit @quotation @i{Io posso spiegarlo per te, ma non posso capirlo per te.} @author Anonimo @@ -20882,8 +20999,8 @@ Operandi | 0 | 1 | 0 | 1 | 0 | 1 @end docbook @end float -@cindex bit, complemento a livello di -@cindex complemento a livello di bit +@cindex bit @subentry complemento a livello di +@cindex complemento sui bit Come si vede, il risultato di un'operazione di AND @`e 1 solo quando @emph{entrambi} i bit sono 1. Il risultato di un'operazione di OR @`e 1 se @emph{almeno un} bit @`e 1. @@ -20893,10 +21010,10 @@ La successiva operazione @`e il @dfn{complemento}; il complemento di 1 @`e 0 e il complemento di 0 @`e 1. Quindi, quest'operazione ``inverte'' tutti i bit di un dato valore. -@cindex bit, spostamento di -@cindex spostamento a sinistra, bit a bit -@cindex spostamento a destra, bit a bit -@cindex spostamento, bit a bit +@cindex bit @subentry spostamento di +@cindex spostamento a sinistra @subentry bit a bit +@cindex spostamento a destra @subentry bit a bit +@cindex spostamento @subentry bit a bit Infine, due altre operazioni comuni consistono nello spostare i bit a sinistra o a destra. Per esempio, se si ha una stringa di bit @samp{10111001} e la si sposta @@ -20911,39 +21028,41 @@ le funzioni predefinite di @command{gawk} che rendono disponibili le operazioni a livello di bit. I parametri opzionali sono racchiusi tra parentesi quadre ([ ]): -@cindex @command{gawk}, operazioni a livello di bit in +@cindex @command{gawk} @subentry operazioni sui bit in @table @asis @cindexgawkfunc{and} -@cindex AND, operazione sui bit +@cindex AND (operazione sui bit) +@cindex operazione sui bit @subentry AND @item @code{and(}@var{v1}@code{,} @var{v2} [@code{,} @dots{}]@code{)} Restituisce l'AND bit a bit degli argomenti. Gli argomenti devono essere almeno due. @cindexgawkfunc{compl} -@cindex complemento a livello di bit +@cindex complemento sui bit +@cindex operazione sui bit @subentry complemento @item @code{compl(@var{val})} Restituisce il complemento bit a bit di @var{val}. @cindexgawkfunc{lshift} -@cindex spostamento a sinistra @item @code{lshift(@var{val}, @var{contatore})} Restituisce il valore di @var{val}, spostato a sinistra di @var{contatore} bit. @cindexgawkfunc{or} -@cindex OR, operazione sui bit +@cindex OR (operazione sui bit) +@cindex operazione sui bit @subentry OR @item @code{or(}@var{v1}@code{,} @var{v2} [@code{,} @dots{}]@code{)} Restituisce l'OR bit a bit degli argomenti. Gli argomenti devono essere almeno due. @cindexgawkfunc{rshift} -@cindex spostamento a destra @item @code{rshift(@var{val}, @var{contatore})} Restituisce il valore di @var{val}, spostato a destra di @var{contatore} bit. @cindexgawkfunc{xor} -@cindex XOR, operazione sui bit +@cindex XOR (operazione sui bit) +@cindex operazione sui bit @subentry XOR @item @code{xor(}@var{v1}@code{,} @var{v2} [@code{,} @dots{}]@code{)} Restituisce il XOR bit a bit degli argomenti. Gli argomenti devono essere almeno due. @@ -20959,10 +21078,10 @@ negativo produce un errore fatale. Si veda la nota a lato Ecco una funzione definita dall'utente (@pxref{Funzioni definite dall'utente}) che illustra l'uso di queste funzioni: -@cindex @code{bits2str()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{bits2str()} -@cindex @code{testbits.awk}, programma -@cindex programma @code{testbits.awk} +@cindex @code{bits2str()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{bits2str()} +@cindex @code{testbits.awk} (programma) +@cindex programma @subentry @code{testbits.awk} @example @group @c file eg/lib/bits2str.awk @@ -21035,11 +21154,11 @@ $ @kbd{gawk -f testbits.awk} @print{} rshift(0x99, 2) = 0x26 = 00100110 @end example -@cindex conversione da stringhe a numeri -@cindex stringhe, conversione -@cindex numeri, conversione in stringhe -@cindex conversione da numeri a stringhe -@cindex numeri, visti come stringhe di bit +@cindex conversione @subentry da stringa a numero +@cindex stringa @subentry conversione +@cindex numeri @subentry conversione in stringhe +@cindex conversione @subentry da numero a stringa +@cindex numeri @subentry visti come stringhe di bit La funzione @code{bits2str()} trasforma un numero binario in una stringa. Inizializzando @code{maschera} a uno otteniamo un valore binario in cui il bit pi@`u a destra @`e impostato a @@ -21137,7 +21256,7 @@ Restituisce il valore 'vero' se @var{x} @`e un vettore. Altrimenti, restituisce 'falso'. @cindexgawkfunc{typeof} -@cindex variabile, tipo di una +@cindex variabili @subentry tipi di @cindex tipo di una variabile @item typeof(@var{x}) Restituisce una delle stringhe seguenti, a seconda del tipo di @var{x}: @@ -21227,11 +21346,11 @@ non ancora tipizzati (untyped) a non ancora assegnati (unassigned). @node Funzioni di internazionalizzazione @subsection Funzioni per tradurre stringhe -@cindex @command{gawk}, funzioni di traduzione di stringhe -@cindex funzioni di traduzione di stringhe -@cindex traduzione di stringhe, funzioni di +@cindex @command{gawk} @subentry funzioni di traduzione di stringhe +@cindex funzioni @subentry di traduzione di stringhe +@cindex traduzione di stringhe @subentry funzioni di @cindex internazionalizzazione -@cindex programmi @command{awk}, internazionalizzare +@cindex programmi @command{awk} @subentry internazionalizzare @command{gawk} prevede strumenti per internazionalizzare i programmi @command{awk}. @@ -21243,8 +21362,8 @@ I parametri opzionali sono racchiusi tra parentesi quadre ([ ]): @table @asis @cindexgawkfunc{bindtextdomain} -@cindex impostare directory con catalogo messaggi tradotti -@cindex messaggi tradotti, impostare directory con catalogo +@cindex impostare @subentry directory con catalogo messaggi tradotti +@cindex messaggi tradotti @subentry impostare directory con catalogo @item @code{bindtextdomain(@var{directory}} [@code{,} @var{dominio}]@code{)} Imposta la directory in cui @command{gawk} trova i file di traduzione dei messaggi, nel caso in cui @@ -21280,8 +21399,9 @@ Il valore di default per @var{categoria} @`e @code{"LC_MESSAGES"}. @node Funzioni definite dall'utente @section Funzioni definite dall'utente -@cindex funzioni definite dall'utente -@cindex utente, funzioni definite dall' +@cindex funzione definita dall'utente +@cindex definite dall'utente @subentry @dfn{Si veda} funzioni definite dall'utente +@cindex utente @subentry funzioni definite dall' Programmi @command{awk} complessi spesso possono essere semplificati definendo delle apposite funzioni personali. Le funzioni definite dall'utente sono richiamate allo stesso modo di quelle @@ -21312,7 +21432,7 @@ di variabili locali @`e semplicemente atroce.} @author Brian Kernighan @end quotation -@cindex funzioni, definizione di +@cindex funzioni @subentry definizione di @cindex definizione di funzioni Definizioni di funzioni possono stare in una posizione qualsiasi tra le regole di un programma @command{awk}. Quindi, la forma generale di un @@ -21334,10 +21454,10 @@ La definizione di una funzione chiamata @var{nome} @`e simile a questa: @end group @end display -@cindex nomi di funzione -@cindex funzioni, nomi di -@cindex limitazioni nei nomi di funzione -@cindex nomi di funzione, limitazioni nei +@cindex nomi @subentry di funzione +@cindex funzioni @subentry nomi di +@cindex limitazioni @subentry nei nomi di funzione +@cindex nomi @subentry di funzione @subentry limitazioni nei @noindent Qui, @var{nome} @`e il nome della funzione da definire. Un nome di funzione valido @`e come un nome di variabile valido: una sequenza di @@ -21397,15 +21517,15 @@ possono essere in alcuni casi degli argomenti e in altri casi delle variabili locali. Un'altra angolatura da cui guardare questo fatto @`e che gli argomenti omessi assumono come valore di default la stringa nulla. -@cindex convenzioni di programmazione, nella scrittura di funzioni -@cindex funzioni, convenzioni di programmazione, nella scrittura di +@cindex convenzioni di programmazione @subentry nella scrittura di funzioni +@cindex funzioni @subentry convenzioni di programmazione @subentry nella scrittura di Solitamente, quando si scrive una funzione, si sa quanti nomi si intendono usare per gli argomenti e quanti si vogliono usare come variabili locali. @`E una convenzione in uso quella di aggiungere alcuni spazi extra tra gli argomenti e le variabili locali, per documentare come va utilizzata quella funzione. -@cindex variabili nascoste +@cindex variabili @subentry nascoste @cindex nascondere valori di variabile Durante l'esecuzione del corpo della funzione, gli argomenti e i valori delle variabili locali @@ -21421,8 +21541,8 @@ funzione @`e in esecuzione. Una volta che l'esecuzione @`e terminata, ritornano accessibili le variabili che erano oscurate durante l'esecuzione della funzione. -@cindex ricorsive, funzioni -@cindex funzioni ricorsive +@cindex ricorsive @subentry funzioni +@cindex funzioni @subentry ricorsive Il corpo della funzione pu@`o contenere espressioni che chiamano altre funzioni. Tali espressioni possono perfino chiamare direttamente, o indirettamente tramite un'altra funzione, la funzione stessa. @@ -21436,10 +21556,10 @@ che @`e descritta in dettaglio nella @ref{Istruzione return}. Molti dei successivi esempi in questa @value{SECTION} usano l'istruzione @code{return}. -@cindex estensioni comuni, parola chiave @code{func} +@cindex estensioni comuni @subentry parola chiave @code{func} @c @cindex @command{awk} language, POSIX version @c @cindex POSIX @command{awk} -@cindex POSIX @command{awk}, parola chiave @code{function} in +@cindex POSIX @command{awk} @subentry @code{function} (parola chiave) In molte implementazioni di @command{awk}, compreso @command{gawk}, la parola chiave @code{function} pu@`o essere abbreviata come @code{func}. @value{COMMONEXT} @@ -21464,15 +21584,15 @@ possono essere usate prima che siano state definite.@footnote{Questo programma in realt@`a non verr@`a eseguito, perch@'e @code{foo()} risulter@`a essere una funzione non definita.}) -@cindex portabilit@`a, nella definizione di funzioni +@cindex portabilit@`a @subentry nella definizione di funzioni Per essere certi che un programma @command{awk} sia portabile, va sempre usata la parola chiave @code{function} per definire una funzione. @node Esempio di funzione @subsection Un esempio di definizione di funzione -@cindex esempio di definizione di funzione -@cindex funzione, esempio di definizione di +@cindex esempio @subentry di definizione di funzione +@cindex funzione @subentry esempio di definizione di Ecco un esempio di funzione definita dall'utente, di nome @@ -21548,8 +21668,8 @@ In questo caso, la ricorsione termina quando la stringa in input @`e gi@`a vuota: @c 8/2014: Thanks to Mike Brennan for the improved formulation -@cindex @code{rev()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{rev()} +@cindex @code{rev()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{rev()} @example function rev(stringa) @{ @@ -21576,8 +21696,8 @@ Il seguente esempio usa la funzione predefinita @code{strftime()} (@pxref{Funzioni di tempo}) per creare una versione @command{awk} di @code{ctime()}: -@cindex @code{ctime()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{ctime()} +@cindex @code{ctime()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{ctime()} @example @c file eg/lib/ctime.awk # ctime.awk @@ -21605,8 +21725,8 @@ e qualche codice a livello utente potrebbe aver modificato in precedenza @node Chiamata di una funzione @subsection Chiamare funzioni definite dall'utente -@cindex funzioni definite dall'utente, chiamare -@cindex chiamare funzioni definite dall'utente +@cindex funzione definita dall'utente @subentry chiamare +@cindex chiamare @subentry funzione definita dall'utente @dfn{Chiamare una funzione} significa richiedere l'esecuzione di una funzione, la quale svolge il compito per cui @`e stata scritta. La chiamata di una funzione @`e un'espressione e il suo valore @`e quello @@ -21646,8 +21766,8 @@ verrebbe emesso un messaggio di errore. @node Campo di validit@`a variabili @subsubsection Variabili locali e globali. -@cindex variabili locali, in una funzione -@cindex locali, variabili, per una funzione +@cindex variabili @subentry locali @subentry in una funzione +@cindex locali @subentry variabili, in una funzione Diversamente da molti altri linguaggi, non c'@`e modo di rendere locale una variabile in un blocco @code{@{} @dots{} @code{@}} di @command{awk}, ma si pu@`o rendere locale una variabile di una funzione. @`E @@ -21796,7 +21916,7 @@ quando la funzione @`e chiamata, nel rispetto della regola seguente: se l'argomento @`e una variabile di tipo vettoriale, questa @`e passata per riferimento. Altrimenti, l'argomento @`e passato per valore. -@cindex chiamare per valore +@cindex chiamare @subentry funzione @subentry per valore Passare un argomento per valore significa che quando una funzione @`e chiamata, le viene fornita una @emph{copia} del valore di quell'argomento. Il chiamante pu@`o usare una variabile il cui valore calcolato viene passato come argomento, ma la @@ -21837,9 +21957,9 @@ calcolato. Se la variabile @code{stringa} esiste anche al di fuori di esterno, perch@'e esso rimane oscurato durante l'esecuzione di @code{mia_funzione()} e non pu@`o quindi essere visto o modificato. -@cindex chiamare per riferimento -@cindex vettori, come parametri di funzione -@cindex funzioni, vettori come parametri di +@cindex chiamare @subentry funzione @subentry per riferimento +@cindex vettori @subentry come parametri di funzione +@cindex funzioni @subentry vettori come parametri di Tuttavia, quando sono dei vettori a fungere da parametri alle funzioni, questi @emph{non} vengono copiati. Invece, il vettore stesso @`e reso disponibile per essere manipolato direttamente dalla funzione. Questo @`e quel che si dice @@ -21874,8 +21994,8 @@ stampa @samp{a[1] = 1, a[2] = due, a[3] = 3}, perch@'e @node Precisazioni sulle funzioni @subsubsection Cose a cui prestare attenzione -@cindex indefinite, funzioni -@cindex funzioni indefinite +@cindex indefinite @subentry funzioni +@cindex funzioni @subentry indefinite Alcune implementazioni di @command{awk} consentono di chiamare una funzione che non @`e stata definita. Viene solo emesso un messaggio che descrive il problema al momento @@ -21900,16 +22020,16 @@ non @`e un problema reale il fatto che che @code{pippo()} non sia stato definito. Solitamente, tuttavia, @`e un problema se un programma chiama una funzione indefinita. -@cindex @dfn{lint}, controlli, funzione indefinita -@cindex controlli @dfn{lint} per funzione indefinita -@cindex funzione indefinita, controlli @dfn{lint} per +@cindex @dfn{lint} @subentry controlli @subentry funzione indefinita +@cindex controllo @subentry @dfn{lint} @subentry per funzione indefinita +@cindex funzione @subentry indefinita @subentry controlli @dfn{lint} per Se si specifica l'opzione @option{--lint} (@pxref{Opzioni}), @command{gawk} elenca le chiamate a funzioni indefinite. -@cindex portabilit@`a, istruzione @code{next} in funzioni definite dall'utente -@cindex @code{next}, istruzione, in funzioni definite dall'utente +@cindex portabilit@`a @subentry istruzione @code{next} in funzioni definite dall'utente +@cindex @code{next} (istruzione) @subentry in funzioni definite dall'utente Alcune implementazione di @command{awk} emettono un messaggio di errore se si usa l'istruzione @code{next} o @code{nextfile} @@ -21961,8 +22081,8 @@ corretto). @node Istruzione return @subsection L'istruzione @code{return} -@cindex @code{return}, istruzione@comma{} in funzioni definite dall'utente -@cindex istruzione @code{return}@comma{} in funzioni definite dall'utente +@cindex @code{return} (istruzione) @subentry in funzioni definite dall'utente +@cindex istruzione @subentry @code{return} @subentry in funzioni definite dall'utente Come visto in parecchi esempi precedenti, il corpo di una funzione definita dall'utente pu@`o contenere un'istruzione @@ -22016,8 +22136,8 @@ function massimo(vettore, i, max) @} @end example -@cindex programmazione, convenzioni di, parametri di funzione -@cindex convenzioni di programmazione, parametri di funzione +@cindex programmazione @subentry convenzioni di @subentry parametri di funzione +@cindex convenzioni di programmazione @subentry parametri di funzione @noindent La chiamata a @code{massimo()} ha un solo argomento, che @`e il nome di un vettore. Le variabili locali @code{i} e @code{max} non vanno intese @@ -22103,11 +22223,11 @@ esserne a conoscenza. @node Chiamate indirette @section Chiamate indirette di funzione -@cindex indiretta, chiamata di funzione -@cindex chiamata indiretta di funzione -@cindex funzione, puntatori a +@cindex indiretta @subentry chiamata di funzione +@cindex chiamare @subentry funzione @subentry indirettamente +@cindex funzione @subentry puntatori a @cindex puntatori a funzioni -@cindex differenze tra @command{awk} e @command{gawk}, chiamata indiretta di funzione +@cindex differenze tra @command{awk} e @command{gawk} @subentry chiamata indiretta di funzione Questa sezione descrive un'estensione avanzata, specifica di @command{gawk}. @@ -22161,8 +22281,10 @@ Con la chiamata @dfn{indiretta} di funzione, si pu@`o richiedere a @command{gawk di usare il @emph{valore} di una variabile come @emph{nome} della funzione da chiamare. -@cindex @code{@@}, notazione per la chiamata indiretta di funzioni -@cindex chiamata indiretta di funzioni, notazione @code{@@} +@cindex @code{@@} (chiocciola) @subentry @code{@@}-notazione per la chiamata indiretta di funzioni +@cindex chiocciola (@code{@@}) @subentry @code{@@}-notazione per la chiamata indiretta di funzioni +@cindex chiamare @subentry funzione @subentry indirettamente, notazione @code{@@} +@cindex indiretta @subentry chiamata di funzione @subentry @code{@@}-notazione La sintassi @`e simile a quella di una normale chiamata di funzione: un identificativo, seguito immediatamente da una parentesi aperta, qualche argomento, e una parentesi chiusa, con l'aggiunta di un carattere @@ -22612,8 +22734,8 @@ imparare. @`E composta dai seguenti capitoli: @node Funzioni di libreria @chapter Una libreria di funzioni @command{awk} @cindex libreria di funzioni @command{awk} -@cindex funzioni di libreria -@cindex funzioni definite dall'utente, libreria di +@cindex funzioni @subentry di libreria +@cindex funzione definita dall'utente @subentry libreria di @iftex La @@ -22677,7 +22799,7 @@ generale, e volesse metterle a disposizione della comunit@`a degli utenti di @ref{Come contribuire}. @end ifclear -@cindex portabilit@`a, programmi di esempio +@cindex portabilit@`a @subentry programmi di esempio I programmi contenuti in questo @value{CHAPTER} e in @ref{Programmi di esempio}, utilizzano anche le funzionalit@`a specifiche di @command{gawk}. @@ -22698,9 +22820,9 @@ per evitare di leggere gli input ancora non letti dal file in input corrente. @item @c 12/2000: Thanks to Nelson Beebe for pointing out the output issue. -@cindex distinzione maiuscolo/minuscolo, programmi di esempio -@cindex @code{IGNORECASE}, variabile, nei programmi di esempio -@cindex variabile @code{IGNORECASE}, nei programmi di esempio +@cindex distinzione maiuscolo/minuscolo @subentry programmi di esempio +@cindex @code{IGNORECASE} (variabile) @subentry programmi di esempio +@cindex variabile @subentry @code{IGNORECASE} @subentry programmi di esempio Infine, alcuni dei programmi scelgono di ignorare la distinzione tra maiuscolo e minuscolo nei loro input, assegnando il valore uno a @code{IGNORECASE}. Si pu@`o ottenere quasi lo stesso effetto@footnote{I risultati non sono identici. @@ -22739,21 +22861,21 @@ di tipo stringa usate nei confronti utilizzano solo lettere minuscole. @node Nomi di variabili di libreria @section Dare un nome a variabili globali in funzioni di libreria -@cindex nomi di vettore/variabile -@cindex nomi di funzione +@cindex nomi @subentry di vettore/variabile +@cindex nomi @subentry di funzione @cindex questioni sui nomi permessi -@cindex nomi permessi, questioni sui -@cindex programmi @command{awk}, documentazione -@cindex documentazione, di programmi @command{awk} +@cindex nomi @subentry permessi @subentry questioni sui +@cindex programmi @command{awk} @subentry documentazione dei +@cindex programmi @command{awk} @subentry documentazione dei Per come si @`e sviluppato il linguaggio @command{awk}, le variabili sono o @dfn{globali} (usabili dall'intero programma) o @dfn{locali} (usabili solo in una specifica funzione). Non c'@`e uno stato intermedio analogo alle variabili @code{statiche} in C. -@cindex variabili globali, per funzioni di libreria -@cindex globali, variabili, per funzioni di libreria -@cindex private, variabili -@cindex variabili private +@cindex variabili @subentry globali @subentry per funzioni di libreria +@cindex globali @subentry variabili @subentry per funzioni di libreria +@cindex private @subentry variabili +@cindex variabili @subentry private Le funzioni di libreria hanno spesso necessit@`a di avere variabili globali da usare per conservare informazioni di stato tra successive chiamate alla funzione; per esempio, la variabile di @code{getopt()} @code{_opti} @@ -22768,8 +22890,8 @@ un utente. Per esempio, un nome come @code{i} o @code{j} non @`e una buona scelta, perch@'e i programmi a livello utente usano spesso nomi di variabile come questi per le proprie elaborazioni. -@cindex convenzioni di programmazione, nomi di variabili private -@cindex programmazione, convenzioni di, nomi di variabili private +@cindex convenzioni di programmazione @subentry nomi di variabili private +@cindex programmazione @subentry convenzioni di @subentry nomi di variabili private I programmi di esempio mostrati in questo @value{CHAPTER} usano per le loro variabili private nomi che iniziano con un trattino basso(@samp{_}). Generalmente gli utenti @@ -22777,8 +22899,8 @@ non usano trattini bassi iniziali nei nomi di variabile, cos@`{@dotless{i}} ques riduce le possibilit@`a che il nome di variabile coincida con un nome usato nel programma dell'utente. -@cindex @code{_} (trattino basso), nei nomi di variabili private -@cindex trattino basso (@code{_}), nei nomi di variabili private +@cindex @code{_} (trattino basso) @subentry nei nomi di variabili private +@cindex trattino basso (@code{_}) @subentry nei nomi di variabili private Inoltre, parecchie funzioni di libreria usano un prefisso che suggerisce quale funzione o gruppo di funzioni usa quelle variabili; per esempio, @code{_pw_byname()} nelle routine che consultano la lista degli utenti @@ -22802,8 +22924,8 @@ mentre il fatto che il nome della variabile non @`e tutto in lettere maiuscole indica che la variabile non @`e una delle variabili predefinite di @command{awk}, come @code{FS}. -@cindex @option{--dump-variables}, opzione, uso per funzioni di libreria -@cindex opzione @option{--dump-variables}, uso per funzioni di libreria +@cindex @option{--dump-variables} (opzione) @subentry uso per funzioni di libreria +@cindex opzione @subentry @option{--dump-variables} @subentry uso per funzioni di libreria @`E importante anche che @emph{tutte} le variabili nelle funzioni di libreria che non abbiano la necessit@`a di essere conservate per tutta la durata del @@ -22823,9 +22945,9 @@ function lib_func(x, y, l1, l2) @} @end example -@cindex vettori associativi, funzioni di libreria e -@cindex libreria di funzioni @command{awk}, vettori associativi e -@cindex funzioni, libreria di, vettori associativi e +@cindex vettori @subentry associativi @subentry funzioni di libreria e +@cindex libreria di funzioni @command{awk} @subentry vettori associativi e +@cindex funzioni @subentry libreria di @subentry vettori associativi e @cindex Tcl Una differente convenzione, comune nella comunit@`a Tcl, @`e quella di usare un solo vettore associativo che contiene i valori necessari alle funzioni di @@ -22981,11 +23103,11 @@ predefinita @code{strtonum()}. @subsection Asserzioni @cindex asserzioni -@cindex @code{assert()}, funzione (libreria C) -@cindex funzione @code{assert()} (libreria C) -@cindex libreria di funzioni @command{awk}, asserzioni -@cindex funzioni, libreria di, asserzioni -@cindex @command{awk}, asserzioni in programmi lunghi +@cindex @code{assert()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{assert()} +@cindex libreria di funzioni @command{awk} @subentry asserzioni +@cindex funzioni @subentry libreria di @subentry asserzioni +@cindex programmi @command{awk} @subentry asserzioni in programmi lunghi Quando si scrivono grossi programmi, spesso @`e utile sapere se una condizione o una serie di condizioni @`e verificata oppure no. Prima di procedere @@ -23018,8 +23140,8 @@ Se l'asserzione @`e falsa, il programma stampa un messaggio simile a questo: prog.c:5: asserzione falsa: `a <= 5 && b >= 17.1' @end example -@cindex @code{assert()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{assert()} +@cindex @code{assert()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{assert()} Il linguaggio C rende possibile trasformare questa condizione in una stringa da usare per stampare il messaggio di diagnosi. Ci@`o in @command{awk} non @`e @@ -23095,8 +23217,8 @@ Se l'asserzione non @`e verificata, si vedr@`a un messaggio simile a questo: mydata:1357: asserzione falsa: a <= 5 && b >= 17.1 @end example -@cindex @code{END}, criterio di ricerca, funzione definita dall'utente @code{assert()} e -@cindex criterio di ricerca @code{END}, funzione definita dall'utente @code{assert()} e +@cindex @code{END} (regola) @subentry funzione definita dall'utente @code{assert()} e +@cindex regola @subentry @code{END} @subentry funzione definita dall'utente @code{assert()} e C'@`e un piccolo problema con questa versione di @code{assert()}. Come visto, una regola @code{END} viene automaticamente aggiunta al programma che chiama @code{assert()}. Normalmente, se un programma consiste @@ -23106,8 +23228,8 @@ vengono letti. Tuttavia, ora che il programma ha una regola @code{END}, (@pxref{Usare BEGIN/END}), provocando molto probabilmente la sospensione del programma come se rimanesse in attesa di input. -@cindex @code{BEGIN}, criterio di ricerca, funzione definita dall'utente @code{assert()} e -@cindex criterio di ricerca @code{BEGIN}, funzione definita dall'utente @code{assert()} e +@cindex @code{BEGIN} (regola) @subentry funzione definita dall'utente @code{assert()} e +@cindex regola @subentry @code{BEGIN} @subentry funzione definita dall'utente @code{assert()} e C'@`e un modo per aggirare questo problema: assicurarsi che la regola @code{BEGIN} termini sempre con un'istruzione @code{exit}. @@ -23115,16 +23237,16 @@ con un'istruzione @code{exit}. @node Funzione round @subsection Arrotondamento di numeri -@cindex arrotondare numeri -@cindex numeri, arrotondamento di -@cindex libreria di funzioni @command{awk}, arrotondamento di numeri -@cindex funzioni, libreria di, arrotondamento di numeri -@cindex @code{print}, istruzione, funzione @code{sprintf()} e -@cindex istruzione @code{print}, funzione @code{sprintf()} e -@cindex @code{printf}, istruzione, funzione @code{sprintf()} e -@cindex istruzione @code{printf}, funzione @code{sprintf()} e -@cindex @code{sprintf()}, funzione, istruzioni @code{print}/@code{printf} e -@cindex funzione @code{sprintf()}, istruzioni @code{print}/@code{printf} e +@cindex arrotondare @subentry numeri +@cindex numeri @subentry arrotondamento +@cindex libreria di funzioni @command{awk} @subentry arrotondamento di numeri +@cindex funzioni @subentry libreria di @subentry arrotondamento di numeri +@cindex @code{print} (istruzione) @subentry funzione @code{sprintf()} e +@cindex istruzione @subentry @code{print} @subentry funzione @code{sprintf()} e +@cindex @code{printf} (istruzione) @subentry funzione @code{sprintf()} e +@cindex istruzione @subentry @code{printf} @subentry funzione @code{sprintf()} e +@cindex @code{sprintf()} (funzione) @subentry istruzioni @code{print}/@code{printf} e +@cindex funzione @subentry @code{sprintf()} @subentry istruzioni @code{print}/@code{printf} e Il modo in cui @code{printf} e @code{sprintf()} (@pxref{Printf}) effettuano l'arrotondamento spesso dipende dalla subroutine C @code{sprintf()} @@ -23139,8 +23261,8 @@ arrotondamento tradizionale; potrebbe essere utile nel caso in cui l'istruzione @code{printf} di @command{awk} che si sta usando faccia degli arrotondamenti statistici: -@cindex @code{round()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{round()} +@cindex @code{round()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{round()} @example @c file eg/lib/round.awk # round.awk --- effettua arrotondamento tradizionale @@ -23188,10 +23310,10 @@ function round(x, ival, aval, frazione) @node Funzione random Cliff @subsection Il generatore di numeri casuali Cliff -@cindex numeri casuali, generatore Cliff -@cindex Cliff, generatore di numeri casuali -@cindex casuali, numeri, generatore Cliff di -@cindex funzioni, libreria di, numeri casuali Cliff +@cindex numeri @subentry casuali @subentry generatore Cliff +@cindex Cliff @subentry generatore di numeri casuali +@cindex casuali @subentry numeri @subentry generatore Cliff di +@cindex funzioni @subentry libreria di @subentry numeri casuali Cliff Il @uref{http://mathworld.wolfram.com/CliffRandomNumberGenerator.html, generatore di numeri casuali Cliff} @@ -23200,8 +23322,8 @@ del rumore per la casualit@`a non mostrando di avere alcuna struttura.'' @`E programmato in modo molto semplice, in meno di 10 righe di codice @command{awk}: -@cindex @code{cliff_rand()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{cliff_rand()} +@cindex @code{cliff_rand()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{cliff_rand()} @example @c file eg/lib/cliff_rand.awk # cliff_rand.awk --- generare numeri casuali con algoritmo di Cliff @@ -23236,10 +23358,10 @@ non @`e abbastanza casuale, si pu@`o tentare di usare al suo posto questa funzio @node Funzioni ordinali @subsection Tradurre tra caratteri e numeri -@cindex libreria di funzioni @command{awk}, valori di carattere come numeri -@cindex funzioni, libreria di, valori di carattere come numeri -@cindex carattere, valore come numero -@cindex numeri, come valori di carattere +@cindex libreria di funzioni @command{awk} @subentry valori di carattere come numeri +@cindex funzioni @subentry libreria di @subentry valori di carattere come numeri +@cindex caratteri @subentry valore come numero +@cindex numeri @subentry come valori di carattere Un'implementazione commerciale di @command{awk} fornisce una funzione predefinita @code{ord()}, che prende un carattere e restituisce il valore numerico per quel carattere nella rappresentazione dei caratteri @@ -23253,12 +23375,12 @@ Entrambe le funzioni si possono scrivere molto bene usando @command{awk}; non vi @`e nessun reale motivo per inglobarle come funzioni predefinite @command{awk}: -@cindex @code{ord()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{ord()} -@cindex @code{chr()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{chr()} -@cindex @code{_ord_init()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{_ord_init()} +@cindex @code{ord()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{ord()} +@cindex @code{chr()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{chr()} +@cindex @code{_ord_init()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{_ord_init()} @example @c file eg/lib/ord.awk # ord.awk --- implementa ord e chr @@ -23306,8 +23428,8 @@ function _ord_init( basso, alto, i, t) @cindex ASCII @cindex EBCDIC @cindex Unicode -@cindex bit di parit@`a (in ASCII) -@cindex @dfn{mark}, bit di parit@`a (in ASCII) +@cindex bit @subentry di parit@`a (in ASCII) +@cindex @dfn{mark} (bit di parit@`a in ASCII) Alcune spiegazioni riguardo ai numeri usati da @code{_ord_init()} non guastano. La serie di caratteri pi@`u importante oggi in uso @`e nota come @@ -23372,10 +23494,10 @@ la funzione. @`E commentato, per poter essere eventualmente usato in produzione @node Funzione join @subsection Trasformare un vettore in una sola stringa -@cindex libreria di funzioni @command{awk}, trasformare vettori in stringhe -@cindex funzioni, libreria di, trasformare vettori in stringhe -@cindex stringhe, trasformare vettori in -@cindex vettori, trasformare in stringhe +@cindex libreria di funzioni @command{awk} @subentry trasformare vettori in stringhe +@cindex funzioni @subentry libreria di @subentry trasformare vettori in stringhe +@cindex stringa @subentry trasformare vettore in +@cindex vettori @subentry trasformare in stringhe Quando si fanno elaborazioni su stringhe, spesso @`e utile poter unire tutte le stringhe di un vettore in una lunga stringa. La funzione seguente, @code{join()}, svolge questo compito. Verr@`a utilizzata nel seguito in diversi @@ -23396,8 +23518,8 @@ siano numerici---una supposizione logica, dato che il vettore probabilmente @`e stato creato con @code{split()} (@pxref{Funzioni per stringhe}): -@cindex @code{join()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{join()} +@cindex @code{join()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{join()} @example @c file eg/lib/join.awk # join.awk --- trasforma un vettore in una stringa @@ -23442,11 +23564,11 @@ sulle stringhe pi@`u difficili di quanto potrebbero essere.} @node Funzione getlocaltime @subsection Gestione dell'ora del giorno -@cindex libreria di funzioni @command{awk}, gestire ora del giorno (marcature temporali) -@cindex funzioni, libreria di, gestione delle ore del giorno -@cindex data e ora, formattate -@cindex marcature temporali, formattate -@cindex ora del giorno, gestire +@cindex libreria di funzioni @command{awk} @subentry gestire ora del giorno (marcature temporali) +@cindex funzioni @subentry libreria di @subentry gestione delle ore del giorno +@cindex data e ora @subentry formattazione +@cindex marcature temporali @subentry formattate +@cindex ora del giorno @subentry gestire Le funzioni @code{systime()} e @code{strftime()} descritte nella @ref{Funzioni di tempo} forniscono la funzionalit@`a minima necessaria per visualizzare l'ora del giorno @@ -23458,8 +23580,8 @@ La seguente funzione, @code{getlocaltime()}, riempie un vettore fornito dall'utente con informazioni sul tempo preformattate. Restituisce una stringa con data e ora corrente formattata come nel programma di utilit@`a @command{date}: -@cindex @code{getlocaltime()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getlocaltime()} +@cindex @code{getlocaltime()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getlocaltime()} @example @c file eg/lib/gettime.awk # getlocaltime.awk --- ottiene l'ora del giorno in un formato usabile @@ -23575,8 +23697,8 @@ Funziona, ma non @`e detto che sia efficiente. La funzione seguente, basata su un suggerimento di Denis Shirokov, legge l'intero contenuto del file in un colpo solo: -@cindex @code{readfile()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{readfile()} +@cindex @code{readfile()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{readfile()} @example @c file eg/lib/readfile.awk # readfile.awk --- legge un intero file in un colpo solo @@ -23716,10 +23838,10 @@ function shell_quote(s, # parametro @node Gestione File Dati @section Gestione di @value{DF} -@cindex file, gestione di +@cindex file @subentry gestione di @cindex gestione di file -@cindex libreria di funzioni @command{awk}, gestire file di dati -@cindex funzioni, libreria di, gestire file di dati +@cindex libreria di funzioni @command{awk} @subentry gestire file di dati +@cindex funzioni @subentry libreria di @subentry gestire file di dati Questa @value{SECTION} presenta funzioni utili per gestire @value{DF} da riga di comando. @@ -23737,8 +23859,8 @@ Questa @value{SECTION} presenta funzioni utili per gestire @node Funzione filetrans @subsection Trovare i limiti dei @value{DF} -@cindex file, gestione di, limiti dei file-dati -@cindex file, inizializzazione e pulizia +@cindex file @subentry gestione di @subentry limiti dei file-dati +@cindex file @subentry inizializzazione e pulizia Ognuna delle regole @code{BEGIN} ed @code{END} viene eseguita esattamente solo una volta, rispettivamente all'inizio e alla fine del programma @command{awk} (@pxref{BEGIN/END}). @@ -23809,10 +23931,10 @@ regola @code{END} contenuta nel programma ``principale'', chiamata per prima. Ancora una volta, l'utilit@`a di poter avere pi@`u regole @code{BEGIN} ed @code{END} dovrebbe risultare chiara. -@cindex @code{a_inizio_file()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{a_inizio_file()} -@cindex @code{a_fine_file()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{a_fine_file()} +@cindex @code{a_inizio_file()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{a_inizio_file()} +@cindex @code{a_fine_file()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{a_fine_file()} Se lo stesso @value{DF} compare due volte di fila sulla riga di comando, @code{a_fine_file()} e @code{a_inizio_file()} non vengono eseguite alla fine del primo passaggio e all'inizio del secondo passaggio. @@ -23874,8 +23996,7 @@ riferimento alla @ref{BEGINFILE/ENDFILE}. @node Funzione rewind @subsection Rileggere il file corrente -@cindex file, leggere un -@cindex file, rileggere un +@cindex file @subentry rileggere Un'altra richiesta per una nuova funzione predefinita @`e stata per una funzione per rileggere il file corrente. L'utente che l'ha richiesta non voleva dover usare @code{getline} @@ -23887,8 +24008,8 @@ fare in modo di chiudere il corrente file in input immediatamente e ricominciare a leggerlo dall'inizio. In mancanza di un nome migliore, chiameremo la funzione @code{rewind()}: -@cindex @code{rewind()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{rewind()} +@cindex @code{rewind()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{rewind()} @example @c file eg/lib/rewind.awk # rewind.awk --- ricarica il file corrente e ricomincia a leggerlo @@ -23962,9 +24083,9 @@ $ @kbd{gawk -f rewind.awk -f test.awk dati } @node Controllo di file @subsection Controllare che i @value{DF} siano leggibili -@cindex risoluzione di problemi, leggibilit@`a file-dati -@cindex leggibilit@`a, file-dati@comma{} controllare la -@cindex file, non elaborare +@cindex risoluzione di problemi @subentry leggibilit@`a file-dati +@cindex leggibilit@`a @subentry di un file-dati @subentry controllare la +@cindex file @subentry non elaborare Normalmente, se si fornisce ad @command{awk} un @value{DF} che non @`e leggibile, il programma si arresta con un errore fatale. Ci sono casi in cui sarebbe preferibile @@ -23975,7 +24096,7 @@ Tuttavia, il codice qui proposto fornisce una soluzione portabile.} Si pu@`o far questo facendo precedere il proprio programma @command{awk} dal seguente programma: -@cindex @code{readable.awk}, programma +@cindex @code{readable.awk} (programma) @example @c file eg/lib/readable.awk # readable.awk --- file di libreria per saltare file non leggibili @@ -24004,9 +24125,9 @@ BEGIN @{ @c endfile @end example -@cindex risoluzione di problemi, funzione @code{getline} -@cindex comando @code{getline}, risoluzione di problemi -@cindex @code{getline}, comando, risoluzione di problemi +@cindex risoluzione di problemi @subentry funzione @code{getline} +@cindex comando @subentry @code{getline} @subentry risoluzione di problemi +@cindex @code{getline} (comando) @subentry risoluzione di problemi Questo codice funziona, perch@'e l'errore di @code{getline} non @`e fatale. Rimuovendo l'elemento da @code{ARGV} con @code{delete} si tralascia il file (perch@'e non @`e pi@`u nella lista). @@ -24039,7 +24160,7 @@ Usando la variabile @code{ARGIND} di @command{gawk} di nome @code{zerofile()} che l'utente deve fornire. Gli argomenti passati sono il @value{FN} e la posizione del file in @code{ARGV}: -@cindex @code{zerofile.awk}, programma +@cindex @code{zerofile.awk} (programma) @example @c file eg/lib/zerofile.awk # zerofile.awk --- file di libreria per elaborare file in input vuoti @@ -24089,9 +24210,9 @@ condizione del ciclo @code{for}, la verifica usa l'operatore @samp{<=}, non @node Ignorare assegnamenti di variabili @subsection Trattare assegnamenti di variabile come @value{FNS} -@cindex assegnamenti di variabile, visti come nomi di file -@cindex file, nomi di, assegnamenti di variabile visti come -@cindex nomi di file, assegnamenti di variabile visti come +@cindex assegnamento @subentry di variabile @subentry visti come nomi di file +@cindex file @subentry nomi di @subentry assegnamenti di variabile visti come +@cindex nomi @subentry di file @subentry assegnamenti di variabile visti come Occasionalmente, potrebbe essere pi@`u opportuno che @command{awk} non elabori gli assegnamenti di variabile presenti sulla riga di comando (@pxref{Opzioni di assegnamento}). @@ -24103,8 +24224,8 @@ Alcuni utenti hanno suggerito un'opzione aggiuntiva da riga di comando per Comunque, poche righe di codice di programmazione in un file di libreria hanno lo stesso effetto: -@cindex @code{noassign.awk}, programma -@cindex programma @code{noassign.awk} +@cindex @code{noassign.awk} (programma) +@cindex programma @subentry @code{noassign.awk} @example @c file eg/lib/noassign.awk # noassign.awk --- file di libreria per evitare la necessit@`a @@ -24155,12 +24276,12 @@ non vengono modificati. @node Funzione getopt @section Elaborare opzioni specificate sulla riga di comando -@cindex libreria di funzioni @command{awk}, opzioni sulla riga di comando -@cindex funzioni, libreria di, opzioni sulla riga di comando -@cindex riga di comando, opzioni, elaborazione di -@cindex opzioni sulla riga di comando, elaborazione di -@cindex funzioni, libreria di, libreria C -@cindex argomenti, elaborazione di +@cindex libreria di funzioni @command{awk} @subentry opzioni sulla riga di comando +@cindex funzioni @subentry libreria di @subentry opzioni sulla riga di comando +@cindex riga di comando @subentry opzioni @subentry elaborazione di +@cindex opzioni @subentry sulla riga di comando @subentry elaborazione di +@cindex funzioni @subentry di libreria C +@cindex argomenti @subentry elaborazione di La maggior parte dei programmi di utilit@`a su sistemi compatibili con POSIX prevedono opzioni presenti sulla riga di comando che possono essere usate per cambiare il modo in cui un programma si comporta. @command{awk} @`e un esempio di @@ -24174,8 +24295,8 @@ come separatore di campo. La prima occorrenza, sulla riga di comando, di @option{--} o di una stringa che non inizia con @samp{-} segnala la fine delle opzioni. -@cindex @code{getopt()}, funzione (libreria C) -@cindex funzione @code{getopt()} (libreria C) +@cindex @code{getopt()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getopt()} I moderni sistemi Unix hanno una funzione C chiamata @code{getopt()} per elaborare gli argomenti presenti sulla riga di comando. Il programmatore fornisce una @@ -24291,8 +24412,8 @@ dividere le stringhe in caratteri singoli usando @code{""} come separatore. La spiegazione della funzione viene data man mano che si elencano i pezzi di codice che la compongono: -@cindex @code{getopt()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getopt()} +@cindex @code{getopt()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getopt()} @example @c file eg/lib/getopt.awk # getopt.awk --- imita in awk la funzione di libreria C getopt(3) @@ -24336,8 +24457,8 @@ chiamata con una stringa di opzioni (il parametro @code{opzioni}). Se @code{opzioni} ha lunghezza zero, @code{getopt()} restituisce immediatamente @minus{}1: -@cindex @code{getopt()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getopt()} +@cindex @code{getopt()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getopt()} @example @c file eg/lib/getopt.awk function getopt(argc, argv, opzioni, unaopz, i) @@ -24551,12 +24672,12 @@ usano @code{getopt()} per elaborare i propri argomenti. @node Funzioni Passwd @section Leggere la lista degli utenti -@cindex libreria di funzioni @command{awk}, leggere la lista degli utenti -@cindex funzioni, libreria di, leggera la lista degli utenti -@cindex utenti, leggere la lista degli -@cindex lista degli utenti@comma{} leggere la -@cindex @code{PROCINFO}, vettore -@cindex vettore @code{PROCINFO} +@cindex libreria di funzioni @command{awk} @subentry leggere la lista degli utenti +@cindex funzioni @subentry libreria di @subentry leggere la lista degli utenti +@cindex utenti @subentry leggere la lista degli +@cindex lista degli utenti @subentry leggere la +@cindex @code{PROCINFO} (vettore) +@cindex vettore @subentry @code{PROCINFO} Il vettore @code{PROCINFO} (@pxref{Variabili predefinite}) d@`a accesso ai numeri ID reale ed effettivo dell'utente e del gruppo e, se @@ -24568,15 +24689,15 @@ sull'utente associate con i numeri ID dell'utente e del gruppo. Questa dalla lista gli utenti. @xref{Funzioni Group} per una raccolta di funzioni simili per ottenere informazioni dalla lista dei gruppi. -@cindex @code{getpwent()}, funzione (libreria C) -@cindex funzione @code{getpwent()} (libreria C) -@cindex @code{getpwent()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getpwent()} -@cindex utenti, informazioni riguardo agli, ottenere -@cindex login, informazioni -@cindex account, informazioni sugli -@cindex password, file delle -@cindex file delle password +@cindex @code{getpwent()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getpwent()} +@cindex @code{getpwent()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getpwent()} +@cindex utenti @subentry informazioni riguardo agli @subentry ottenere +@cindex login @subentry informazioni +@cindex account @subentry informazioni sugli +@cindex password @subentry file delle +@cindex file @subentry delle password Lo standard POSIX non definisce il file dove sono mantenute le informazioni degli utenti. Invece, fornisce il file d'intestazione @code{<pwd.h>} e diverse @dfn{subroutine} del linguaggio C per ottenere informazioni sugli @@ -24590,7 +24711,7 @@ un file non accessibile dall'utente normale. La struttura del file @file{/etc/passwd} @`e rimasta la stessa, ma al posto del campo @dfn{password} c'@`e una @code{x}.} -@cindex @command{pwcat}, programma +@cindex @command{pwcat} (programma) Sebbene un programma @command{awk} possa semplicemente leggere @file{/etc/passwd} direttamente, questo file pu@`o non contenere tutte le informazioni su tutti gli utenti del sistema.@footnote{Capita spesso che le @@ -24713,8 +24834,8 @@ comunemente una shell, come Bash. Di seguito si riportano alcune righe di un possibile output di @command{pwcat}: @cindex Jacobs, Andrew -@cindex Robbins, Arnold -@cindex Robbins, Miriam +@cindex Robbins @subentry Arnold +@cindex Robbins @subentry Miriam @example $ @kbd{pwcat} @print{} root:x:0:1:Operator:/:/bin/sh @@ -24732,8 +24853,8 @@ Dopo quest'introduzione, di seguito si riporta un gruppo di funzioni per ottenere informazioni sugli utenti. Ci sono diverse funzioni, che corrispondono alle omonime funzioni C: -@cindex @code{_pw_init()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{_pw_init()} +@cindex @code{_pw_init()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{_pw_init()} @example @c file eg/lib/passwdawk.in # passwd.awk --- accedere alle informazioni del file delle password @@ -24787,8 +24908,8 @@ function _pw_init( oldfs, oldrs, olddol0, pwcat, using_fw, using_fpat) @c endfile @end example -@cindex @code{BEGIN}, criterio di ricerca, programma @code{pwcat} -@cindex criterio di ricerca @code{BEGIN}, programma @code{pwcat} +@cindex @code{BEGIN} (regola) @subentry programma @code{pwcat} +@cindex regola @subentry @code{BEGIN} @subentry programma @code{pwcat} La regola @code{BEGIN} imposta una variabile privata col nome della directory in cui si trova @command{pwcat}. @@ -24805,10 +24926,10 @@ La variabile @code{_pw_inizializzato} @`e usata per efficienza, poich@'e in questo modo @code{_pw_init()} viene chiamata solo una volta. -@cindex @code{PROCINFO}, vettore, verificare la divisione in campi -@cindex vettore @code{PROCINFO}, verificare la divisione in campi -@cindex @code{getline}, comando, funzione definita dall'utente, @code{_pw_init()} -@cindex comando @code{getline}, funzione definita dall'utente, @code{_pw_init()} +@cindex @code{PROCINFO} (vettore) @subentry verificare la divisione in campi +@cindex vettore @subentry @code{PROCINFO} @subentry verificare la divisione in campi +@cindex @code{getline} (comando) @subentry funzione definita dall'utente, @code{_pw_init()} +@cindex comando @subentry @code{getline} @subentry funzione definita dall'utente, @code{_pw_init()} Poich@'e questa funzione usa @code{getline} per leggere informazioni da @command{pwcat}, dapprima salva i valori di @code{FS}, @code{RS} e @code{$0}. Annota nella variabile @code{using_fw} se la suddivisione in campi @@ -24835,16 +24956,16 @@ impostando @code{@w{_pw_inizializzato}} a uno, e ripristinando @code{FS} se necessario), @code{RS} e @code{$0}. L'uso di @code{@w{_pw_contatore}} verr@`a spiegato a breve. -@cindex @code{getpwnam()}, funzione (libreria C) -@cindex funzione @code{getpwnam()} (libreria C) +@cindex @code{getpwnam()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getpwnam()} La funzione @code{getpwnam()} ha un nome utente come argomento di tipo stringa. Se quell'utente @`e presente nella lista, restituisce la riga appropriata. Altrimenti, il riferimento a un elemento inesistente del vettore aggiunge al vettore stesso un elemento il cui valore @`e la stringa nulla: -@cindex @code{getpwnam()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getpwnam()} +@cindex @code{getpwnam()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getpwnam()} @example @group @c file eg/lib/passwdawk.in @@ -24857,15 +24978,15 @@ function getpwnam(nome) @end group @end example -@cindex @code{getpwuid()}, funzione (libreria C) -@cindex funzione @code{getpwuid()} (libreria C) +@cindex @code{getpwuid()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getpwuid()} In modo simile, la funzione @code{getpwuid()} ha per argomento il numero ID di un utente. Se un utente con quel numero si trova nella lista, restituisce la riga appropriata. Altrimenti restituisce la stringa nulla: -@cindex @code{getpwuid()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getpwuid()} +@cindex @code{getpwuid()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getpwuid()} @example @c file eg/lib/passwdawk.in function getpwuid(uid) @@ -24876,14 +24997,14 @@ function getpwuid(uid) @c endfile @end example -@cindex @code{getpwent()}, funzione (libreria C) -@cindex funzione @code{getpwent()} (libreria C) +@cindex @code{getpwent()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getpwent()} La funzione @code{getpwent()} scorre semplicemnte la lista, un elemento alla volta. Usa @code{_pw_contatore} per tener traccia della posizione corrente nel vettore @code{_pw_bycount}: -@cindex @code{getpwent()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getpwent()} +@cindex @code{getpwent()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getpwent()} @example @c file eg/lib/passwdawk.in function getpwent() @@ -24896,13 +25017,13 @@ function getpwent() @c endfile @end example -@cindex @code{endpwent()}, funzione (libreria C) -@cindex funzione @code{endpwent()} (libreria C) +@cindex @code{endpwent()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{endpwent()} La funzione @code{@w{endpwent()}} reimposta @code{@w{_pw_contatore}} a zero, in modo che chiamate successive a @code{getpwent()} ricomincino da capo: -@cindex @code{endpwent()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{endpwent()} +@cindex @code{endpwent()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{endpwent()} @example @c file eg/lib/passwdawk.in function endpwent() @@ -24951,19 +25072,19 @@ usa queste funzioni. @node Funzioni Group @section Leggere la lista dei gruppi -@cindex libreria di funzioni @command{awk}, leggere la lista dei gruppi -@cindex funzioni, libreria di, leggere la lista dei gruppi -@cindex gruppi, lista dei, leggere la -@cindex lista dei gruppi, leggere la -@cindex @code{PROCINFO}, vettore, appartenenza a gruppi e -@cindex @code{getgrent()}, funzione (libreria C) -@cindex funzione @code{getgrent()} (libreria C) -@cindex @code{getgrent()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getgrent()} -@cindex gruppi@comma{} informazioni su -@cindex account, informazioni sugli -@cindex gruppi, file dei -@cindex file dei gruppi +@cindex libreria di funzioni @command{awk} @subentry leggere la lista dei gruppi +@cindex funzioni @subentry libreria di @subentry leggere la lista dei gruppi +@cindex gruppi @subentry lista dei @subentry leggere la +@cindex lista dei gruppi @subentry leggere la +@cindex @code{PROCINFO} (vettore) @subentry appartenenza a gruppi e +@cindex @code{getgrent()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getgrent()} +@cindex @code{getgrent()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getgrent()} +@cindex gruppi @subentry informazioni sui +@cindex account @subentry informazioni sugli +@cindex gruppi @subentry file dei +@cindex file @subentry dei gruppi Molto di quel che @`e stato detto @iftex nella @@ -24986,8 +25107,8 @@ piccolo programma in C che genera la lista dei gruppi come suo output. @command{grcat}, un programma in C che fornisce la lista dei gruppi, @`e il seguente: -@cindex @command{grcat}, programma C -@cindex programma C, @command{grcat} +@cindex @command{grcat} (programma C) +@cindex programma C @subentry @command{grcat} @example @c file eg/lib/grcat.c /* @@ -25115,10 +25236,10 @@ Qui ci sono le funzioni per ottenere informazioni relative alla lista dei gruppi. Ce ne sono diverse, costruite sul modello delle omonime funzioni della libreria C: -@cindex @code{getline}, comando, funzione definita dall'utente, @code{_gr_init()} -@cindex comando @code{getline}, funzione definita dall'utente, @code{_gr_init()} -@cindex @code{_gr_init()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{_gr_init()} +@cindex @code{getline} (comando) @subentry funzione definita dall'utente, @code{_gr_init()} +@cindex comando @subentry @code{getline} @subentry funzione definita dall'utente, @code{_gr_init()} +@cindex @code{_gr_init()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{_gr_init()} @example @c file eg/lib/groupawk.in # group.awk --- funzioni per il trattamento del file dei gruppi @@ -25235,16 +25356,16 @@ Infine, @code{_gr_init()} chiude la @dfn{pipe} a @command{grcat}, ripristina @code{$0}, inizializza @code{_gr_contatore} a zero (per essere usato pi@`u tardi), e rende @code{_gr_inizializzato} diverso da zero. -@cindex @code{getgrnam()}, funzione (libreria C) -@cindex funzione @code{getgrnam()} (libreria C) +@cindex @code{getgrnam()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getgrnam()} La funzione @code{getgrnam()} ha come argomento un nome di gruppo, e se quel gruppo esiste, viene restituito. Altrimenti, il riferimento a un elemento inesistente del vettore aggiunge al vettore stesso un elemento il cui valore @`e la stringa nulla: -@cindex @code{getgrnam()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getgrnam()} +@cindex @code{getgrnam()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getgrnam()} @example @c file eg/lib/groupawk.in function getgrnam(group) @@ -25255,13 +25376,13 @@ function getgrnam(group) @c endfile @end example -@cindex @code{getgrgid()}, funzione (libreria C) -@cindex funzione @code{getgrgid()} (libreria C) +@cindex @code{getgrgid()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getgrgid()} La funzione @code{getgrgid()} @`e simile; ha come argomento un numero ID di gruppo e controlla le informazioni assiciate con quell'ID di gruppo: -@cindex @code{getgrgid()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getgrgid()} +@cindex @code{getgrgid()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getgrgid()} @example @c file eg/lib/groupawk.in function getgrgid(gid) @@ -25272,13 +25393,13 @@ function getgrgid(gid) @c endfile @end example -@cindex @code{getgruser()}, funzione (libreria C) -@cindex funzione @code{getgruser()} (libreria C) +@cindex @code{getgruser()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getgruser()} La funzione @code{getgruser()} non ha un equivalente in C. Ha come argomento un nome-utente e restituisce l'elenco dei gruppi di cui l'utente @`e membro: -@cindex @code{getgruser()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getgruser()} +@cindex @code{getgruser()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getgruser()} @example @c file eg/lib/groupawk.in function getgruser(user) @@ -25289,13 +25410,13 @@ function getgruser(user) @c endfile @end example -@cindex @code{getgrent()}, funzione (libreria C) -@cindex funzione @code{getgrent()} (libreria C) +@cindex @code{getgrent()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getgrent()} La funzione @code{getgrent()} scorre la lista un elemento alla volta. Usa @code{_gr_contatore} per ricordare la posizione corrente nella lista: -@cindex @code{getgrent()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{getgrent()} +@cindex @code{getgrent()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{getgrent()} @example @c file eg/lib/groupawk.in function getgrent() @@ -25310,13 +25431,13 @@ function getgrent() @c endfile @end example -@cindex @code{endgrent()}, funzione (libreria C) -@cindex funzione @code{endgrent()} (libreria C) +@cindex @code{endgrent()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{endgrent()} La funzione @code{endgrent()} reimposta @code{_gr_contatore} a zero in modo che @code{getgrent()} possa ricominciare da capo: -@cindex @code{endgrent()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{endgrent()} +@cindex @code{endgrent()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{endgrent()} @example @c file eg/lib/groupawk.in function endgrent() @@ -25358,8 +25479,8 @@ un vettore, stampando gli indici e i valori di ogni elemento. Viene chiamata col vettore e con una stringa che contiene il nome del vettore: -@cindex @code{walk_array()}, funzione definita dall'utente -@cindex funzione definita dall'utente, @code{walk_array()} +@cindex @code{walk_array()} @subentry funzione definita dall'utente +@cindex funzione definita dall'utente @subentry @code{walk_array()} @example @c file eg/lib/walkarray.awk function walk_array(vett, nome, i) @@ -25595,9 +25716,8 @@ output identico a quello della versione originale. @node Programmi di esempio @chapter Programmi utili scritti in @command{awk} -@cindex @command{awk}, programmi, esempi di -@cindex programmi @command{awk}, esempi di -@cindex esempi di programmi @command{awk} +@cindex programmi @command{awk} @subentry esempi di +@cindex esempio @subentry di programma @command{awk} @c FULLXREF ON @iftex @@ -25680,8 +25800,8 @@ cut.awk -- -c1-8 i_miei_file > risultati @node Cloni @section Reinventare la ruota per divertimento e profitto -@cindex programmi POSIX, implementazione in @command{awk} -@cindex POSIX, programmi, implementazione in @command{awk} +@cindex programmi POSIX @subentry implementazione in @command{awk} +@cindex POSIX @subentry programmi @subentry implementazione in @command{awk} Questa @value{SECTION} presenta un certo numero di programmi di utilit@`a POSIX implementati in @command{awk}. Riscrivere questi programmi in @@ -25712,10 +25832,10 @@ I programmi sono presentati in ordine alfabetico. @node Programma cut @subsection Ritagliare campi e colonne -@cindex @command{cut}, programma di utilit@`a -@cindex programma di utilit@`a @command{cut} -@cindex campi, ritagliare -@cindex colonne, ritagliare +@cindex @command{cut} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{cut} +@cindex campi @subentry ritagliare +@cindex colonne @subentry ritagliare Il programma di utilit@`a @command{cut} seleziona, o ``taglia'' (@dfn{cut}), caratteri o campi dal suo standard input e li spedisce al suo standard output. @@ -25766,8 +25886,8 @@ di libreria necessarie, e una funzione @code{sintassi()} che stampa un messaggio ed esce. @code{sintassi()} @`e chiamato se si specificano degli argomenti non validi: -@cindex @code{cut.awk}, programma -@cindex programma @code{cut.awk} +@cindex @code{cut.awk} (programma) +@cindex programma @subentry @code{cut.awk} @example @c file eg/prog/cut.awk # cut.awk --- implementa cut in awk @@ -25801,10 +25921,10 @@ function sintassi() @c endfile @end example -@cindex @code{BEGIN}, criterio di ricerca, eseguire programmi @command{awk} e -@cindex criterio di ricerca @code{BEGIN}, eseguire programmi @command{awk} e -@cindex @code{FS}, variabile, eseguire programmi @command{awk} e -@cindex variabile @code{FS}, eseguire programmi @command{awk} e +@cindex @code{BEGIN} (regola) @subentry eseguire programmi @command{awk} e +@cindex regola @subentry @code{BEGIN} @subentry eseguire programmi @command{awk} e +@cindex @code{FS} (variabile) @subentry eseguire programmi @command{awk} e +@cindex variabile @subentry @code{FS} @subentry eseguire programmi @command{awk} e Subito dopo c'@`e una regola @code{BEGIN} che analizza le opzioni della riga di comando. Questa regola imposta @code{FS} a un solo carattere TAB, perch@'e quello @`e @@ -25852,8 +25972,8 @@ BEGIN @{ @c endfile @end example -@cindex separatori di campo, spazi come -@cindex spazi come separatori di campo +@cindex separatore di campo @subentry spazi come +@cindex spazi @subentry come separatore di campo Nella scrittura del codice si deve porre particolare attenzione quando il delimitatore di campo @`e uno spazio. Usare un semplice spazio (@code{@w{" "}}) come valore per @code{FS} @`e @@ -26048,11 +26168,11 @@ di suddividere la riga in input in singoli caratteri. @node Programma egrep @subsection Ricercare espressioni regolari nei file -@cindex espressioni regolari, ricerca di -@cindex ricercare, in file, espressioni regolari -@cindex file, ricercare espressioni regolari nei -@cindex @command{egrep}, programma di utilit@`a -@cindex programma di utilit@`a @command{egrep} +@cindex espressioni regolari @subentry ricerca di +@cindex ricerca @subentry in file @subentry di espressioni regolari +@cindex file @subentry ricercare espressioni regolari nei +@cindex @command{egrep} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{egrep} Il programma di utilit@`a @command{egrep} ricerca occorrenze di espressioni regolari all'interno di file. Usa espressioni regolari che sono quasi identiche a quelle disponibili in @@ -26119,8 +26239,8 @@ da implementare con @command{gawk}; basta usare la variabile predefinita @code{IGNORECASE} (@pxref{Variabili predefinite}): -@cindex @code{egrep.awk}, programma -@cindex programma @code{egrep.awk} +@cindex @code{egrep.awk} (programma) +@cindex programma @subentry @code{egrep.awk} @example @c file eg/prog/egrep.awk # egrep.awk --- simula egrep in awk @@ -26294,8 +26414,8 @@ possiamo stampare il @value{FN}, e quindi saltare al file successivo con Infine, ogni riga viene stampata, preceduta, se necessario, dal @value{FN} e dai due punti (@code{:}): -@cindex @code{!} (punto esclamativo), operatore @code{!} -@cindex punto esclamativo (@code{!}), operatore @code{!} +@cindex @code{!} (punto esclamativo) @subentry operatore @code{!} +@cindex punto esclamativo (@code{!}) @subentry operatore @code{!} @example @c file eg/prog/egrep.awk @{ @@ -26356,10 +26476,10 @@ function sintassi() @node Programma id @subsection Stampare informazioni sull'utente -@cindex stampare informazioni utente -@cindex utenti, informazioni riguardo agli, stampare -@cindex @command{id}, programma di utilit@`a -@cindex programma di utilit@`a @command{id} +@cindex stampare @subentry informazioni utente +@cindex utenti @subentry informazioni riguardo agli @subentry stampare +@cindex @command{id} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{id} Il programma di utilit@`a @command{id} elenca i numeri identificativi (ID) reali ed effettivi di un utente, e l'insieme dei gruppi a cui l'utente appartiene, se ve ne sono. @@ -26373,8 +26493,8 @@ $ @kbd{id} @print{} uid=1000(arnold) gid=1000(arnold) groups=1000(arnold),4(adm),7(lp),27(sudo) @end example -@cindex @code{PROCINFO}, vettore, @dfn{process ID} di utente e di gruppo e -@cindex vettore @code{PROCINFO}, @dfn{process ID} di utente e di gruppo e +@cindex @code{PROCINFO} (vettore) @subentry @dfn{process ID} di utente e di gruppo e +@cindex vettore @subentry @code{PROCINFO} @subentry @dfn{process ID} di utente e di gruppo e Questa informazione @`e parte di ci@`o che @`e reso disponibile dal vettore @code{PROCINFO} di @command{gawk} (@pxref{Variabili predefinite}). Comunque, il programma di utilit@`a @command{id} fornisce un output pi@`u @@ -26402,8 +26522,8 @@ l'ID reale dell'utente @`e divisa in parti, separate tra loro da @samp{:}. Il nome @`e il primo campo. Un codice analogo @`e usato per l'ID effettivo, e per i numeri che descrivono i gruppi: -@cindex @code{id.awk}, programma -@cindex programma @code{id.awk} +@cindex @code{id.awk} (programma) +@cindex programma @subentry @code{id.awk} @example @c file eg/prog/id.awk # id.awk --- implement id in awk @@ -26509,9 +26629,9 @@ consente di risparmiare parecchie righe di programma. @c FIXME: One day, update to current POSIX version of split -@cindex file, splitting -@cindex @code{split}, programma di utilit@`a -@cindex programma di utilit@`a @code{split} +@cindex file @subentry suddividere +@cindex @code{split} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @code{split} Il programma @command{split} divide grossi file di testo in pezzi pi@`u piccoli. La sua sintassi @`e la seguente:@footnote{Questo @`e la sintassi tradizionale. La versione POSIX del comando ha una sintassi differente, ma per lo scopo di @@ -26544,8 +26664,8 @@ numero in questione pu@`o apparire negativo, lo si fa diventare positivo, e viene usato per contare le righe. Il nome del @value{DF} @`e per ora ignorato e l'ultimo argomento @`e usato come prefisso per i @value{FNS} in output: -@cindex @code{split.awk}, programma di utilit@`a -@cindex programma di utilit@`a @code{split.awk} +@cindex @code{split.awk} (programma) +@cindex programma @subentry @code{split.awk} @example @c file eg/prog/split.awk # split.awk --- comando split scritto in awk @@ -26659,10 +26779,10 @@ anche il problema posto dalla codifica EBCDIC. @node Programma tee @subsection Inviare l'output su pi@`u di un file -@cindex file, multipli@comma{} duplicare l'output su -@cindex output, duplicarlo su pi@`u file -@cindex @code{tee}, programma di utilit@`a -@cindex programma di utilit@`a @code{tee} +@cindex file @subentry multipli @subentry duplicare l'output su +@cindex output @subentry duplicarlo su pi@`u file +@cindex @code{tee} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @code{tee} Il programma @code{tee} @`e noto come @dfn{pipe fitting} (tubo secondario). @code{tee} copia il suo standard input al suo standard output e inoltre lo duplica scrivendo sui file indicati nella riga di comando. La sua sintassi @@ -26681,8 +26801,8 @@ sulla riga di comando, in un vettore di nome @code{copia}. @code{tee} non pu@`o usare @code{ARGV} direttamente, perch@'e @command{awk} tenta di elaborare ogni @value{FN} in @code{ARGV} come dati in input. -@cindex flag, variabili di tipo -@cindex variabili di tipo indicatore [@dfn{flag}] +@cindex @dfn{flag} (indicatore), variabili di tipo +@cindex variabili @subentry di tipo indicatore (@dfn{flag}) Se il primo argomento @`e @option{-a}, la variabile flag @code{append} viene impostata a vero, e sia @code{ARGV[1]} che @code{copia[1]} vengono cancellati. Se @code{ARGC} @`e minore di due, nessun @@ -26691,8 +26811,8 @@ esce. Infine, @command{awk} viene obbligato a leggere lo standard input impostando @code{ARGV[1]} al valore @code{"-"} e @code{ARGC} a due: -@cindex @code{tee.awk}, programma di utilit@`a -@cindex programma di utilit@`a @code{tee.awk} +@cindex @code{tee.awk} (programma) +@cindex programma @subentry @code{tee.awk} @example @c file eg/prog/tee.awk # tee.awk --- tee in awk @@ -26790,10 +26910,10 @@ END @{ @c FIXME: One day, update to current POSIX version of uniq -@cindex stampare righe di testo non duplicate -@cindex testo@comma{} stampare, righe non duplicate di -@cindex @command{uniq}, programma di utilit@`a -@cindex programma di utilit@`a @command{uniq} +@cindex stampare @subentry righe di testo non duplicate +@cindex testo @subentry stampare @subentry righe non duplicate di +@cindex @command{uniq} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{uniq} Il programma di utilit@`a @command{uniq} legge righe di dati ordinati sul suo standard input, e per default rimuove righe duplicate. In altre parole, stampa solo righe uniche; da cui il @@ -26862,8 +26982,8 @@ ripetute che quelle non ripetute. Il file di output, se specificato, @`e assegnato a @code{file_output}. In precedenza, @code{file_output} @`e inizializzato allo standard output, @file{/dev/stdout}: -@cindex @code{uniq.awk}, programma di utilit@`a -@cindex programma di utilit@`a @code{uniq.awk} +@cindex @code{uniq.awk} (programma) +@cindex programma @subentry @code{uniq.awk} @example @c file eg/prog/uniq.awk @group @@ -27083,12 +27203,12 @@ programma per seguite questo suggerimento. @c FIXME: One day, update to current POSIX version of wc @cindex contare -@cindex file in input, contare elementi nel -@cindex parole, contare le -@cindex caratteri, contare i -@cindex righe, contare le -@cindex @command{wc}, programma di utilit@`a -@cindex programma di utilit@`a @command{wc} +@cindex input @subentry contare elementi nel +@cindex parole @subentry contare le +@cindex caratteri @subentry contare i +@cindex righe @subentry contare le +@cindex @command{wc} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{wc} Il programma di utilit@`a @command{wc} (@dfn{word count}, contatore di parole) conta righe, parole, e caratteri in uno o pi@`u file in input. La sua sintassi @`e la seguente: @@ -27135,8 +27255,8 @@ La regola @code{BEGIN} si occupa degli argomenti. La variabile @code{stampa_totale} @`e vera se pi@`u di un file @`e presente sulla riga di comando: -@cindex @code{wc.awk}, programma di utilit@`a -@cindex programma di utilit@`a @code{wc.awk} +@cindex @code{wc.awk} (programma) +@cindex programma @subentry @code{wc.awk} @example @c file eg/prog/wc.awk # wc.awk --- conta righe, parole, caratteri @@ -27292,9 +27412,9 @@ Si spera che siano interessanti e divertenti. @node Programma dupword @subsection Trovare parole duplicate in un documento -@cindex parole duplicate, ricerca di -@cindex ricerca di parole -@cindex documenti@comma{} ricerca in +@cindex parole @subentry duplicate @subentry ricerca di +@cindex ricerca @subentry di parole +@cindex documenti @subentry ricerca in Un errore comune quando si scrive un testo lungo @`e quello di ripetere accidentalmente delle parole. Tipicamente lo si pu@`o vedere in testi del tipo ``questo questo programma fa quanto segue@dots{}'' Quando il testo @`e pubblicato in rete, spesso @@ -27328,8 +27448,8 @@ Se, dopo aver rimosso tutta la punteggiatura, non rimane alcun campo, il record corrente @`e saltato. In caso contrario, il programma esegue il ciclo per ogni parola, confrontandola con quella che la precede: -@cindex @code{dupword.awk}, programma -@cindex programma @code{dupword.awk} +@cindex @code{dupword.awk} (programma) +@cindex programma @subentry @code{dupword.awk} @example @c file eg/prog/dupword.awk # dupword.awk --- trova parole duplicate in un testo @@ -27364,8 +27484,8 @@ per ogni parola, confrontandola con quella che la precede: @node Programma alarm @subsection Un programma di sveglia -@cindex insonnia, cura per -@cindex Robbins, Arnold +@cindex insonnia @subentry cura per +@cindex Robbins @subentry Arnold @quotation @i{Nessuna cura contro l'insonnia @`e efficace quanto una sveglia che suona.} @author Arnold Robbins @@ -27397,8 +27517,8 @@ Aharon Robbins <arnold@skeeve.com> wrote: @author Erik Quanstrom @end quotation -@cindex tempo, sveglia, programma di esempio -@cindex sveglia, programma di esempio +@cindex tempo @subentry sveglia @subentry programma di esempio +@cindex sveglia @subentry programma di esempio Il seguente programma @`e un semplice programma di ``sveglia''. Si pu@`o specificare un'ora del giorno e un messaggio opzionale. All'ora specificata, il programma stampa il messaggio sullo standard output. Inoltre, @@ -27414,6 +27534,7 @@ da @end ifnottex @ref{Funzione getlocaltime}. +@cindex ASCII Tutto il lavoro @`e svolto nella regola @code{BEGIN}. La prima parte @`e il controllo degli argomenti e l'impostazione dei valori di default: l'intervallo prima di ripetere, il contatore, e il messaggio da stampare. @@ -27427,8 +27548,8 @@ Per amor di variet@`a, questo programma usa un'istruzione @code{switch} con una serie di istruzioni @code{if}-@code{else}. Ecco il programma: -@cindex @code{alarm.awk}, programma -@cindex programma @code{alarm.awk} +@cindex @code{alarm.awk} (programma) +@cindex programma @subentry @code{alarm.awk} @example @c file eg/prog/alarm.awk # alarm.awk --- impostare una sveglia @@ -27530,8 +27651,8 @@ prima di far scattare la sveglia: @c endfile @end example -@cindex @command{sleep}, programma di utilit@`a -@cindex programma di utilit@`a @command{sleep} +@cindex @command{sleep} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{sleep} Infine, il programma usa la funzione @code{system()} (@pxref{Funzioni di I/O}) per chiamare il programma di utilit@`a @command{sleep}. Il programma di utilit@`a @@ -27565,10 +27686,10 @@ per ritardare per il numero di secondi necessario: @node Programma translate @subsection Rimpiazzare o eliminare caratteri -@cindex caratteri, rimpiazzare -@cindex rimpiazzare caratteri -@cindex @command{tr}, programma di utilit@`a -@cindex programma di utilit@`a @command{tr} +@cindex caratteri @subentry rimpiazzare +@cindex rimpiazzare @subentry caratteri in un file +@cindex @command{tr} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{tr} Il programma di utilit@`a di sistema @command{tr} rimpiazza caratteri. Per esempio, @`e spesso usato per trasformare lettere maiuscole in lettere minuscole in vista di ulteriori elaborazioni: @@ -27634,8 +27755,8 @@ come stringa. Il programma principale imposta due variabili globali, @code{DA} Infine, la regola di elaborazione si limita a chiamare @code{traducilo()} per ogni record: -@cindex @code{translate.awk}, programma -@cindex programma @code{translate.awk} +@cindex @code{translate.awk} (programma) +@cindex programma @subentry @code{translate.awk} @example @c file eg/prog/translate.awk # translate.awk --- fa cose simili al comando tr @@ -27724,8 +27845,8 @@ trarre ispirazione dal codice di @file{cut.awk} (@pxref{Programma cut}). @node Programma labels @subsection Stampare etichette per lettere -@cindex stampare etichette per lettera -@cindex etichette per lettera@comma{} stampare +@cindex stampare @subentry etichette per lettera +@cindex etichette per lettera @subentry stampare Ecco un programma ``del mondo-reale''@footnote{``Del mondo-reale'' @`e definito come ``un programma effettivamente usato per realizzare qualcosa''.}. Questo @dfn{script} legge elenchi di nomi e indirizzi, e genera etichette per @@ -27793,8 +27914,8 @@ La regola @code{END} si occupa di stampare l'ultima pagina di etichette; @`e improbabile che il numero di indirizzi da stampare sia un multiplo esatto di 20: -@cindex @code{labels.awk}, programma -@cindex programma @code{labels.awk} +@cindex @code{labels.awk} (programma) +@cindex programma @subentry @code{labels.awk} @example @c file eg/prog/labels.awk # labels.awk --- stampare etichette per lettera @@ -27862,7 +27983,7 @@ END @{ @node Programma utilizzo parole @subsection Generare statistiche sulla frequenza d'uso delle parole -@cindex parole, statistica utilizzo delle +@cindex parole @subentry statistica utilizzo delle @cindex statistica utilizzo delle parole Quando si lavora con una grande quantit@`a di testo, pu@`o essere interessante @@ -27929,8 +28050,8 @@ interessati a sapere quali parole ricorrono pi@`u di frequente, o ad avere una tabella in ordine alfabetico che mostra quante volte ricorre ogni parola. @end itemize -@cindex @command{sort}, programma di utilit@`a -@cindex programma di utilit@`a @command{sort} +@cindex @command{sort} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{sort} Il primo problema si pu@`o risolvere usando @code{tolower()} per rimuovere la distinzione maiuscolo/minuscolo. Il secondo problema si pu@`o risolvere usando @code{gsub()} per rimuovere i caratteri di interpunzione. Infine, per @@ -27938,8 +28059,8 @@ risolvere il terzo problema si pu@`o usare il programma di utilit@`a @command{sort} per elaborare l'output dello @dfn{script} @command{awk}. Ecco la nuova versione del programma: -@cindex @code{wordfreq.awk}, programma -@cindex programma @code{wordfreq.awk} +@cindex @code{wordfreq.awk} (programma) +@cindex programma @subentry @code{wordfreq.awk} @example @c file eg/prog/wordfreq.awk # wordfreq.awk --- stampa la lista con la frequenza delle parole @@ -28010,7 +28131,7 @@ informazioni su come usare il programma @command{sort}. @node Programma riordino diario @subsection Eliminare duplicati da un file non ordinato -@cindex righe, duplicate@comma{} rimuovere +@cindex righe @subentry duplicate @subentry rimuovere @cindex rimuovere righe duplicate Il programma @command{uniq} (@pxref{Programma uniq}) @@ -28036,8 +28157,8 @@ incontrate. La regola @code{END} stampa semplicemente le righe, in ordine: @cindex Rakitzis, Byron -@cindex @code{histsort.awk}, programma -@cindex programma @code{histsort.awk} +@cindex @code{histsort.awk} (programma) +@cindex programma @subentry @code{histsort.awk} @example @c file eg/prog/histsort.awk # histsort.awk --- compatta un file della cronologia dei comandi della shell @@ -28084,9 +28205,9 @@ riga @`e stata trovata. @node Programma extract @subsection Estrarre programmi da un file sorgente Texinfo -@cindex Texinfo, estrarre programma da file sorgente +@cindex Texinfo @subentry estrarre programma da file sorgente @cindex estrarre programma da file sorgente Texinfo -@cindex file Texinfo, estrarre programma da +@cindex file @subentry Texinfo @subentry estrarre programma da @ifnotinfo Sia questo capitolo che il precedente (@ref{Funzioni di libreria}) @@ -28117,7 +28238,7 @@ e anche @uref{https://www.gnu.org/software/texinfo/manual/texinfo/, online}.) @end ifnotinfo @ifinfo (Il linguaggio Texinfo @`e descritto esaurientemente, a partire da -@inforef{Top, , Texinfo, texinfo,Texinfo---The GNU Documentation Format}.) +@inforef{Top, , Texinfo, texinfo,Texinfo --- The GNU Documentation Format}.) @end ifinfo Per quel che ci riguarda, @`e sufficiente sapere tre cose riguardo ai file di @@ -28196,8 +28317,8 @@ stato fornito un comando (@code{NF} dev'essere almeno tre) e controllando anche che il comando termini con un codice di ritorno uguale a zero, che sta a significare che tutto @`e andato bene: -@cindex @code{extract.awk}, programma -@cindex programma @code{extract.awk} +@cindex @code{extract.awk} (programma) +@cindex programma @subentry @code{extract.awk} @example @c file eg/prog/extract.awk # extract.awk --- estrae file ed esegue programmi dal file Texinfo @@ -28367,10 +28488,10 @@ function fine_file_inattesa() @node Programma sed semplice @subsection Un semplice editor di flusso -@cindex @command{sed}, programma di utilit@`a -@cindex programma di utilit@`a @command{sed} +@cindex @command{sed} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{sed} @cindex editori di flusso -@cindex flusso, editori di +@cindex flusso @subentry editori di Il programma di utilit@`a @command{sed} @`e un @dfn{editore di flusso}, ovvero un programma che legge un flusso di dati, lo modifica, e scrive il file cos@`{@dotless{i}} modificato. @@ -28398,8 +28519,8 @@ come un nome di @value{DF} da elaborare. Se non ne viene fornito alcuno, si usa lo standard input: @cindex Brennan, Michael -@cindex @command{awksed.awk}, programma -@cindex programma @command{awksed.awk} +@cindex @command{awksed.awk} (programma) +@cindex programma @subentry @command{awksed.awk} @c @cindex simple stream editor @c @cindex stream editor, simple @example @@ -28485,8 +28606,8 @@ usando @code{print} o @code{printf} come richiesto, a seconda del valore di @node Programma igawk @subsection Una maniera facile per usare funzioni di libreria -@cindex libreria di funzioni @command{awk}, programma di esempio per usare -@cindex funzioni, librerie di, programma di esempio per usare +@cindex libreria di funzioni @command{awk} @subentry programma di esempio per usare una +@cindex funzioni @subentry libreria di @subentry programma di esempio per usare una @iftex Nella @end iftex @@ -28649,8 +28770,8 @@ la variabile di shell Il programma @`e il seguente: -@cindex @code{igawk.sh}, programma -@cindex programma @code{igawk.sh} +@cindex @code{igawk.sh} (programma) +@cindex programma @subentry @code{igawk.sh} @example @c file eg/prog/igawk.sh #! /bin/sh @@ -28974,7 +29095,7 @@ permettere l'uso di programmi @command{awk} come @dfn{script} Web CGI.} @node Programma anagram @subsection Trovare anagrammi da una lista di parole -@cindex anagrammi, trovare +@cindex anagrammi @subentry trovare Un'interessante sfida per il programmatore @`e quella di cercare @dfn{anagrammi} in una lista di parole (come @file{/usr/share/dict/italian} presente in molti sistemi GNU/Linux). @@ -28994,8 +29115,8 @@ Il programma seguente usa vettori di vettori per riunire parole con la stessa firma, e l'ordinamento di vettori per stampare le parole trovate in ordine alfabetico: -@cindex @code{anagram.awk}, programma -@cindex programma @code{anagram.awk} +@cindex @code{anagram.awk} (programma) +@cindex programma @subentry @code{anagram.awk} @example @c file eg/prog/anagram.awk # anagram.awk --- Un'implementazione dell'algoritmo per trovare anagrammi @@ -29110,8 +29231,8 @@ barili librai @node Programma signature @subsection E ora per qualcosa di completamente differente -@cindex @code{signature}, programma -@cindex programma @code{signature} +@cindex @code{signature} (programma) +@cindex programma @subentry @code{signature} @cindex Brini, Davide Il programma seguente @`e stato scritto da Davide Brini @c (@email{dave_br@@gmx.com}) @@ -29397,10 +29518,10 @@ semplifica notevolmente le cose. Quale problema @`e peraltro generato cos@`{@do facendo? @c answer, reading from "-" o /dev/stdin -@cindex percorso di ricerca per file sorgente -@cindex ricerca, percorso di, per file sorgente -@cindex file sorgente, percorso di ricerca per -@cindex directory, ricerca +@cindex percorso di ricerca @subentry per file sorgente +@cindex ricerca @subentry percorso di, per file sorgente +@cindex file @subentry sorgente @subentry percorso di ricerca per +@cindex directory @subentry ricerca @item Come ulteriore esempio dell'idea che non sempre @`e necessario aggiungere nuove funzionalit@`a a un programma, si consideri l'idea di avere due file in @@ -29468,8 +29589,8 @@ Contiene i seguenti capitoli: @node Funzionalit@`a avanzate @chapter Funzionalit@`a avanzate di @command{gawk} -@cindex @command{gawk}, funzionalit@`a avanzate -@cindex avanzate, funzionalit@`a, di @command{gawk} +@cindex @command{gawk} @subentry funzionalit@`a avanzate +@cindex avanzate @subentry funzionalit@`a @subentry di @command{gawk} @ignore Contributed by: Peter Langston <pud!psl@bellcore.bellcore.com> @@ -29551,10 +29672,11 @@ tratta della capacit@`a di aggiungere dinamicamente nuove funzioni predefinite a @node Dati non decimali @section Consentire dati di input non decimali -@cindex opzione @option{--non-decimal-data} -@c @cindex funzionalit@`a avanzate, dati di input non decimali -@cindex input, dati non decimali -@cindex costanti, non decimali +@cindex opzione @subentry @option{--non-decimal-data} +@cindex @option{--non-decimal-data} (opzione) +@c @cindex funzionalit@`a @subentry avanzate, dati di input non decimali +@cindex input @subentry dati non decimali +@cindex costanti @subentry non decimali Se si esegue @command{gawk} con l'opzione @option{--non-decimal-data}, si possono avere valori in base diversa da dieci nei dati di input: @@ -29593,9 +29715,10 @@ e poich@'e l'uso di questa funzionalit@`a pu@`o portare a risultati inattesi, il comportamento di default @`e quello lasciarla disabilitata. Se si vuole, la si deve richiedere esplicitamente. -@cindex programmazione, convenzioni di, opzione @code{--non-decimal-data} -@cindex @option{--non-decimal-data}, opzione, funzione @code{strtonum()} e -@cindex @code{strtonum()}, funzione (@command{gawk}), opzione @code{--non-decimal-data} e +@cindex programmazione @subentry convenzioni di @subentry opzione @code{--non-decimal-data} +@cindex @option{--non-decimal-data} (opzione) @subentry funzione @code{strtonum()} e +@cindex opzione @subentry @option{--non-decimal-data} @subentry funzione @code{strtonum()} e +@cindex @code{strtonum()} (funzione @command{gawk}) @subentry opzione @code{--non-decimal-data} e @quotation ATTENZIONE @emph{L'uso di questa opzione non @`e consigliata.} Pu@`o provocare errori molto seri eseguendo vecchi programmi. @@ -29897,6 +30020,7 @@ produzione dovrebbe usare la funzione @code{isarray()} (@pxref{Funzioni per i tipi}) per controllare ci@`o, e scegliere un ordinamento preciso per i sottovettori. +@cindex modalit@`a POSIX Tutti gli ordinamenti basati su @code{PROCINFO["sorted_in"]} sono disabilitati in modalit@`a POSIX, perch@'e il vettore @code{PROCINFO} in questo caso non @`e speciale. @@ -29913,15 +30037,20 @@ ordinato di vettori non @`e il default. @node Funzioni di ordinamento di vettori @subsection Ordinare valori e indici di un vettore con @command{gawk} -@cindex vettori, ordinamento dei +@cindex vettori @subentry ordinamento @subentry @code{asort()} (funzione @command{gawk}) +@cindex vettori @subentry ordinamento @subentry @code{asorti()} (funzione @command{gawk}) @cindexgawkfunc{asort} -@cindex @code{asort()}, funzione (@command{gawk}), ordinamento di vettori -@cindex funzione @code{asort()} (@command{gawk}), ordinamento di vettori +@cindex @code{asort()} (funzione @command{gawk}) @subentry ordinamento di vettori +@cindex funzione @subentry @code{asort()} (@command{gawk}) @subentry ordinamento di vettori +@cindex @code{asort()} (funzione @command{gawk}) @subentry effetti collaterali +@cindex funzione @subentry @code{asort()} (@command{gawk}) @subentry effetti collaterali @cindexgawkfunc{asorti} -@cindex @code{asorti()}, funzione (@command{gawk}), ordinamento di vettori -@cindex funzione @code{asorti()} (@command{gawk}), ordinamento di vettori -@cindex @code{sort()}, funzione, ordinamento di vettori -@cindex funzione @code{sort()}, ordinamento di vettori +@cindex @code{asorti()} (funzione @command{gawk}) @subentry ordinamento di vettori +@cindex funzione @subentry @code{asorti()} (@command{gawk}) @subentry ordinamento di vettori +@cindex @code{asorti()} (funzione @command{gawk}) @subentry effetti collaterali +@cindex funzione @subentry @code{asorti()} (@command{gawk}) @subentry effetti collaterali +@cindex @code{sort()} (funzione) @subentry ordinamento di vettori +@cindex funzione @subentry @code{sort()} @subentry ordinamento di vettori Nella maggior parte delle implementazioni di @command{awk}, ordinare un vettore richiede una funzione @code{sort()}. Questo pu@`o essere istruttivo per provare diversi algoritmi di ordinamento, ma normalmente non @`e questo lo scopo del @@ -29945,8 +30074,10 @@ via. Il confronto di default @`e basato sul tipo di elementi Tutti i valori numerici vengono prima dei valori di stringa, che a loro volta vengono prima di tutti i sottovettori. -@cindex effetti collaterali, funzione @code{asort()} -@cindex funzione @code{asort()}, effetti collaterali +@cindex effetti collaterali @subentry funzione @subentry @code{asort()} +@cindex funzione @subentry @code{asort()} @subentry effetti collaterali +@cindex effetti collaterali @subentry funzione @subentry @code{asorti()} +@cindex funzione @subentry @code{asorti()} @subentry effetti collaterali Un effetto collaterale rilevante nel chiamare @code{asort()} @`e che @emph{gli indici originali del vettore vengono persi irreparabilmente}. Poich@'e questo non sempre @`e opportuno, @code{asort()} accetta un @@ -30006,7 +30137,7 @@ loro ordine finale e li usa per riempire il vettore risultato, mentre @code{asorti()} prende gli @emph{indici} nel loro ordine finale e li usa per riempire il vettore risultato. -@cindex conteggio riferimenti, ordinamento vettori +@cindex conteggio riferimenti @subentry ordinamento vettori @quotation NOTA Copiare indici ed elementi non @`e dispendioso in termini di memoria. Internamente, @command{gawk} mantiene un @dfn{conteggio dei riferimenti} ai @@ -30017,10 +30148,10 @@ valori che esiste in memoria. @end quotation @c Document It And Call It A Feature. Sigh. -@cindex @command{gawk}, variabile @code{IGNORECASE} in -@cindex vettori, ordinamento, variabile @code{IGNORECASE} e -@cindex @code{IGNORECASE}, variabile, funzioni di ordinamento dei vettori e -@cindex variabile @code{IGNORECASE}, funzioni di ordinamento dei vettori e +@cindex @command{gawk} @subentry variabile @subentry @code{IGNORECASE} in +@cindex vettori @subentry ordinamento @subentry variabile @code{IGNORECASE} e +@cindex @code{IGNORECASE} (variabile) @subentry funzioni di ordinamento dei vettori e +@cindex variabile @subentry @code{IGNORECASE} @subentry funzioni di ordinamento dei vettori e Poich@'e @code{IGNORECASE} influenza i confronti tra stringhe, il valore di @code{IGNORECASE} influisce anche sull'ordinamento sia con @code{asort()} che con @code{asorti()}. @@ -30093,7 +30224,7 @@ $ @kbd{gawk -f confronta_in_minuscolo.awk} @c 8/2014. Neither Mike nor BWK saw this as relevant. Commenting it out. @ignore @cindex Brennan, Michael -@cindex programmers, attractiveness of +@cindex programmers @subentry attractiveness of @smallexample @c Path: cssun.mathcs.emory.edu!gatech!newsxfer3.itd.umich.edu!news-peer.sprintlink.net!news-sea-19.sprintlink.net!news-in-west.sprintlink.net!news.sprintlink.net!Sprint!204.94.52.5!news.whidbey.com!brennan From: brennan@@whidbey.com (Mike Brennan) @@ -30123,8 +30254,8 @@ Mike Brennan @end smallexample @end ignore -@cindex funzionalit@`a avanzate, processi@comma{} comunicare con -@cindex processi, comunicazioni bidirezionali con +@cindex funzionalit@`a @subentry avanzate @subentry processi, comunicare con +@cindex processi @subentry comunicazioni bidirezionali con Spesso @`e utile poter inviare dati a un programma separato che li elabori e in seguito leggere il risultato. Questo pu@`o essere sempre @@ -30154,11 +30285,11 @@ generare @value{FNS} unici. Questo @`e un punto valido; tuttavia, i file temporanei rimangono pi@`u difficili da usare delle @dfn{pipe} bidirezionali.} @c 8/2014 @cindex coprocessi -@cindex input/output bidirezionale -@cindex @code{|} (barra verticale), operatore @code{|&} (I/O) -@cindex barra verticale (@code{|}), operatore @code{|&} (I/O) -@cindex @command{csh}, comando, operatore @code{|&}, confronto con -@cindex comando @command{csh}, operatore @code{|&}, confronto con +@cindex input/output @subentry bidirezionale +@cindex @code{|} (barra verticale) @subentry operatore @code{|&} (I/O) +@cindex barra verticale (@code{|}) @subentry operatore @code{|&} (I/O) +@cindex @command{csh} (comando di utilit@`a) @subentry operatore @code{|&}, confronto con +@cindex comando @subentry @command{csh} @subentry operatore @code{|&}, confronto con Comunque, con @command{gawk}, @`e possibile aprire una @dfn{pipe} @emph{bidirezionale} verso un altro processo. Il secondo processo @`e chiamato @dfn{coprocesso}, @@ -30197,10 +30328,10 @@ figlio separatamente. @cindex stalli @cindex abbracci mortali -@cindex @dfn{deadlocks}, vedi stalli -@cindex bufferizzazione, dell'input/output -@cindex input/output, bufferizzazione -@cindex @code{getline}, comando, stalli e +@cindex @dfn{deadlocks} @subentry vedi stalli +@cindex bufferizzazione @subentry dell'input/output +@cindex input/output @subentry bufferizzazione +@cindex @code{getline} (comando) @subentry stalli e @item La permanenza in memoria (bufferizzazione) dell'I/O del sottoprocesso potrebbe essere un problema. @command{gawk} automaticamente scrive su disco tutto @@ -30213,8 +30344,8 @@ processo rimane in attesa che l'altro processo faccia qualcosa. @end itemize -@cindex @code{close()}, funzione, @dfn{pipe} bidirezionali e -@cindex funzione @code{close()}, @dfn{pipe} bidirezionali e +@cindex @code{close()} (funzione) @subentry @dfn{pipe} bidirezionali e +@cindex funzione @subentry @code{close()} @subentry @dfn{pipe} bidirezionali e @`E possibile chiudere una @dfn{pipe} bidirezionale con un coprocesso solo in una direzione, fornendo un secondo argomento, @code{"to"} o @code{"from"}, alla funzione @code{close()} (@pxref{Chiusura file e @dfn{pipe}}). @@ -30222,8 +30353,8 @@ Queste stringhe dicono a @command{gawk} di chiudere la @dfn{pipe}, rispettivamen nella direzione che invia i dati al coprocesso e nella direzione che legge da esso. -@cindex @command{sort}, programma di utilit@`a, coprocessi e -@cindex programma di utilit@`a @command{sort}, coprocessi e +@cindex @command{sort} (programma di utilit@`a) @subentry coprocessi e +@cindex programma di utilit@`a @subentry @command{sort} @subentry coprocessi e Questo @`e particolarmente necessario per usare il programma di utilit@`a di sistema @command{sort} come parte di un coprocesso; @command{sort} deve leggere @emph{tutti} i dati di input @@ -30259,6 +30390,7 @@ un'indicazione di fine-file. Questo fa in modo che @command{sort} ordini i dati e scriva i dati ordinati nel programma @command{gawk}. Una volta che tutti i dati sono stati letti, @command{gawk} termina il coprocesso ed esce. +@cindex ASCII Come nota a margine, l'assegnamento @samp{LC_ALL=C} nel comando @command{sort} assicura che @command{sort} usi l'ordinamento tradizionale di Unix (ASCII). Ci@`o non @`e strettamente necessario in questo caso, ma @`e bene sapere come farlo. @@ -30285,9 +30417,9 @@ o @code{getline}. @xref{Continuazione dopo errori} per ulteriori informazioni. @end quotation -@cindex @command{gawk}, vettore @code{PROCINFO} in -@cindex @code{PROCINFO}, vettore, comunicazioni attraverso le @dfn{pty} e -@cindex vettore @code{PROCINFO}, comunicazioni attraverso le @dfn{pty} e +@cindex @command{gawk} @subentry vettore @subentry @code{PROCINFO} in +@cindex @code{PROCINFO} (vettore) @subentry comunicazioni attraverso le @dfn{pty} e +@cindex vettore @subentry @code{PROCINFO} @subentry comunicazioni attraverso le @dfn{pty} e Per le comunicazioni bidirezionali si possono anche usare delle pseudo @dfn{tty} (@dfn{pty}) al posto delle @dfn{pipe}, se il sistema in uso le prevede. Questo vien fatto, a seconda del comando da usare, impostando un elemento @@ -30382,17 +30514,17 @@ E ora, magicamente, funziona! @node Reti TCP/IP @section Usare @command{gawk} per la programmazione di rete -@cindex funzionalit@`a avanzate, programmazione di rete -@cindex avanzate, funzionalit@`a, programmazione di rete -@cindex reti, programmazione di +@cindex funzionalit@`a @subentry avanzate @subentry programmazione di rete +@cindex avanzate @subentry funzionalit@`a @subentry programmazione di rete +@cindex reti @subentry programmazione di @cindex TCP/IP @cindex @code{/inet/@dots{}}, file speciali (in @command{gawk}) -@cindex file speciali @code{/inet/@dots{}} (in @command{gawk}) +@cindex file @subentry speciali @subentry @code{/inet/@dots{}} (in @command{gawk}) @cindex @code{/inet4/@dots{}}, file speciali (in @command{gawk}) -@cindex file speciali @code{/inet4/@dots{}} (in @command{gawk}) +@cindex file @subentry speciali @subentry @code{/inet4/@dots{}} (in @command{gawk}) @cindex @code{/inet6/@dots{}}, file speciali (in @command{gawk}) -@cindex file speciali @code{/inet6/@dots{}} (in @command{gawk}) -@cindex @code{EMRED} +@cindex file @subentry speciali @subentry @code{/inet6/@dots{}} (in @command{gawk}) +@cindex @code{EMRED} (codice di errore di fantasia) @ifnotdocbook @quotation @code{EMRED}:@* @@ -30451,8 +30583,8 @@ Il protocollo da usare sull'IP. Questo dev'essere o @samp{tcp} o TCP dovrebbe venir usato per la maggior parte delle applicazioni. @item porta-locale -@cindex @code{getaddrinfo()}, funzione (libreria C) -@cindex funzione @code{getaddrinfo()} (libreria C) +@cindex @code{getaddrinfo()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{getaddrinfo()} Il numero di porta TCP o UDP da usare. Si usa un numero di porta di valore @samp{0} quando si vuole che sia il sistema a scegliere una porta. Questo @`e quel che si dovrebbe fare quando si scrive un'applicazione @@ -30471,9 +30603,9 @@ Anche in questo caso, si usi @samp{0} se non ci sono preferenze, o alternativamente, un nome di servizio comunemente noto. @end table -@cindex @command{gawk}, variabile @code{ERRNO} in -@cindex @code{ERRNO}, variabile -@cindex variabile @code{ERRNO} +@cindex @command{gawk} @subentry variabile @subentry @code{ERRNO} in +@cindex @code{ERRNO} (variabile) +@cindex variabile @subentry @code{ERRNO} @quotation NOTA Un insuccesso nell'apertura di un socket bidirezionale dar@`a luogo alla segnalazione di un errore non fatale al codice chiamante. @@ -30520,10 +30652,10 @@ per accedere ai servizi disponibili su Secure Socket Layer @node Profilare @section Profilare i propri programmi @command{awk} -@cindex @command{awk}, programmi, profilare +@cindex programmi @command{awk} @subentry profilare @cindex profilare programmi @command{awk} -@cindex @code{awkprof.out}, file -@cindex file @code{awkprof.out} +@cindex @code{awkprof.out} @subentry file +@cindex file @subentry @file{awkprof.out} @`E possibile tener traccia dell'esecuzione dei propri programmi @command{awk}. Ci@`o si pu@`o fare passando l'opzione @option{--profile} a @command{gawk}. @@ -30531,8 +30663,8 @@ Al termine dell'esecuzione, @command{gawk} crea un profilo del programma in un file chiamato @file{awkprof.out}. A causa dell'attivit@`a di profilazione l'esecuzione del programma @`e pi@`u lenta fino al 45% rispetto al normale. -@cindex @option{--profile}, opzione -@cindex opzione @option{--profile} +@cindex @option{--profile} (opzione) +@cindex opzione @subentry @option{--profile} Come mostrato nel seguente esempio, l'opzione @option{--profile} pu@`o essere usata per cambiare il nome del file su cui @command{gawk} scriver@`a il profilo: @@ -30593,10 +30725,10 @@ del profilatore di @command{gawk} su questo programma e sui dati (quest'esempio dimostra anche che i programmatori di @command{awk} a volte si alzano molto presto al mattino per lavorare): -@cindex @code{BEGIN}, criterio di ricerca, profilazione e -@cindex criterio di ricerca @code{BEGIN}, profilazione e -@cindex @code{END}, criterio di ricerca, profilazione e -@cindex criterio di ricerca @code{END}, profilazione e +@cindex @code{BEGIN} (regola) @subentry profilazione e +@cindex regola @subentry @code{BEGIN} @subentry profilazione e +@cindex @code{END} (regola) @subentry profilazione e +@cindex regola @subentry @code{END} @subentry profilazione e @example # profilo gawk, creato Mon Sep 29 05:16:21 2014 @@ -30661,7 +30793,7 @@ Le regole @code{BEGIN} ed @code{END} multiple conservano le loro distinte identit@`a, cos@`{@dotless{i}} come le regole @code{BEGINFILE} ed @code{ENDFILE} multiple. -@cindex criteri di ricerca, conteggi, in un profilo +@cindex criteri di ricerca @subentry conteggi in un profilo @item Le regole criterio di ricerca--azione hanno due conteggi. Il primo conteggio, a sinistra della regola, mostra quante volte @@ -30681,7 +30813,7 @@ c'@`e un conteggio che mostra quante volte la condizione @`e stata trovata vera. Il conteggio per @code{else} indica quante volte la verifica non ha avuto successo. -@cindex cicli, conteggi per l'intestazione, in un profilo +@cindex cicli @subentry conteggi per l'intestazione @subentry in un profilo @item Il conteggio per un ciclo (come @code{for} o @code{while}) mostra quante volte il test del ciclo @`e stato eseguito. @@ -30689,8 +30821,7 @@ o @code{while}) mostra quante volte il test del ciclo @`e stato eseguito. istruzione in una regola per determinare quante volte la regola @`e stata eseguita. Se la prima istruzione @`e un ciclo, il conteggio @`e ingannevole.) -@cindex funzioni definite dall'utente, conteggi@comma{} in un profilo -@cindex definite dall'utente, funzioni, conteggi@comma{} in un profilo +@cindex funzione definita dall'utente @subentry conteggi @subentry in un profilo @item Per le funzioni definite dall'utente, il conteggio vicino alla parola chiave @code{function} indica quante volte la funzione @`e stata chiamata. @@ -30698,14 +30829,14 @@ I conteggi vicino alle istruzioni nel corpo mostrano quante volte quelle istruzioni sono state eseguite. @cindex @code{@{@}} (parentesi graffe) -@cindex parentesi graffe (@code{@{@}}) +@cindex parentesi @subentry graffe (@code{@{@}}) @item L'impaginazione usa lo stile ``K&R'' con le tabulazioni. Le parentesi graffe sono usate dappertutto, anche dove il corpo di un @code{if}, di un @code{else} o di un ciclo @`e formato da un'unica istruzione. -@cindex @code{()} (parentesi), in un profilo -@cindex parentesi (@code{()}), in un profilo +@cindex @code{()} (parentesi) @subentry in un profilo +@cindex parentesi @subentry (@code{()}) @subentry in un profilo @item Le parentesi vengono usate solo dov'@`e necessario, come si rileva dalla struttura del programma e dalle regole di precedenza. @@ -30761,9 +30892,10 @@ che @`e corretto, ma probabilmente inatteso. (Se un programma usa sia @samp{print $0} che un semplice @samp{print}, tale differenza @`e mantenuta.) -@cindex profilare programmi @command{awk}, dinamicamente -@cindex @command{gawk}, programma, profilazione dinamica -@cindex profilazione dinamica +@cindex profilare programmi @command{awk} @subentry dinamicamente +@cindex @command{gawk} @subentry programma @subentry profilazione dinamica +@cindex @command{gawk} @subentry profilare programmi +@cindex profilazione @subentry dinamica Oltre a creare profili una volta completato il programma, @command{gawk} pu@`o generare un profilo mentre @`e in esecuzione. Questo @`e utile se il proprio programma @command{awk} entra in un ciclo @@ -30776,11 +30908,11 @@ $ @kbd{gawk --profile -f mioprog &} [1] 13992 @end example -@cindex @command{kill}, comando@comma{} profilazione dinamica e -@cindex comando @command{kill}@comma{} profilazione dinamica e -@cindex @code{USR1}, segnale, per profilazione dinamica -@cindex @code{SIGUSR1}, segnale, per profilazione dinamica -@cindex segnali @code{USR1}/@code{SIGUSR1}, per profilazione +@cindex @command{kill} (comando) @subentry profilazione dinamica e +@cindex comando @subentry @command{kill} @subentry profilazione dinamica e +@cindex @code{USR1} (segnale) @subentry per profilazione dinamica +@cindex @code{SIGUSR1} (segnale) (per profilazione dinamica) +@cindex segnali @subentry @code{USR1}/@code{SIGUSR1} (per profilazione) @noindent La shell stampa un numero di job e il numero di ID del relativo processo; in questo caso, 13992. Si usi il comando @command{kill} per inviare il @@ -30811,18 +30943,18 @@ Si pu@`o inviare a @command{gawk} il segnale @code{USR1} quante volte si vuole. Ogni volta, il profilo e la traccia della chiamata alla funzione vengono aggiunte in fondo al file di profilo creato. -@cindex @code{HUP}, segnale, per profilazione dinamica -@cindex @code{SIGHUP}, segnale, per profilazione dinamica -@cindex segnali @code{HUP}/@code{SIGHUP}, per profilazione +@cindex @code{HUP} (segnale) @subentry per profilazione dinamica +@cindex @code{SIGHUP} (segnale) (per profilazione dinamica) +@cindex segnali @subentry @code{HUP}/@code{SIGHUP} (per profilazione) Se si usa il segnale @code{HUP} invece del segnale @code{USR1}, @command{gawk} genera il profilo e la traccia della chiamata alla funzione ed esce. -@cindex @code{INT}, segnale (MS-Windows) -@cindex @code{SIGINT}, segnale (MS-Windows) -@cindex segnali @code{INT}/@code{SIGINT} (MS-Windows) -@cindex @code{QUIT}, segnale (MS-Windows) -@cindex @code{SIGQUIT}, segnale (MS-Windows) -@cindex segnali @code{QUIT}/@code{SIGQUIT} (MS-Windows) +@cindex @code{INT} (segnale) (MS-Windows) +@cindex @code{SIGINT} (segnale) (MS-Windows) +@cindex segnali @subentry @code{INT}/@code{SIGINT} (MS-Windows) +@cindex @code{QUIT} (segnale) (MS-Windows) +@cindex @code{SIGQUIT} (segnale) (MS-Windows) +@cindex segnali @subentry @code{QUIT}/@code{SIGQUIT} (MS-Windows) Quando @command{gawk} viene eseguito sui sistemi MS-Windows, usa i segnali @code{INT} e @code{QUIT} per generare il profilo, e nel caso del segnale @code{INT}, @command{gawk} esce. Questo perch@'e @@ -30842,8 +30974,8 @@ Una volta, l'opzione @option{--pretty-print} eseguiva anche il programma. Ora non pi@`u. @end quotation -@cindex profilazione, differenza rispetto alla stampa elegante -@cindex stampa elegante, differenza rispetto alla profilazione +@cindex profilazione @subentry differenza rispetto alla stampa elegante +@cindex stampa elegante @subentry differenza rispetto alla profilazione C'@`e una differenza significativa tra l'output creato durante la profilazione, e quello creato durante la stampa elegante. L'output della stampa elegante preserva i commenti originali che erano nel programma, anche se la loro @@ -30936,9 +31068,9 @@ ci@`o avrebbe avuto come risultato un incremento delle vendite. Per questo motivo, l'internazionalizzazione e la localizzazione di programmi e sistemi software @`e divenuta una pratica comune. -@cindex internazionalizzazione, localizzazione -@cindex @command{gawk}, internazionalizzazione e, si veda internazionalizzazione -@cindex internazionalizzazione, localizzazione, @command{gawk} e +@cindex internazionalizzazione @subentry localizzazione +@cindex @command{gawk} @subentry internazionalizzazione e @seeentry{internazionalizzazione} +@cindex internazionalizzazione @subentry localizzazione @subentry @command{gawk} e Per molti anni la possibilit@`a di fornire l'internazionalizzazione era sostanzialmente limitata ai programmi scritti in C e C++. Questo @value{CHAPTER} descrive la libreria @dfn{ad hoc} utilizzata da @@ -30964,8 +31096,9 @@ non sono pi@`u obbligati a scrivere in C o C++ quando l'internazionalizzazione @node I18N e L10N @section Internazionalizzazione e localizzazione -@cindex internazionalizzazione di programmi @command{awk} -@cindex localizzazione, si veda internazionalizzazione@comma{} localizzazione +@cindex programmi @command{awk} @subentry internazionalizzare +@cindex internazionalizzazione @subentry di programmi @command{awk} +@cindex localizzazione @seealso{internazionalizzazione} @cindex localizzazione @dfn{Internazionalizzazione} significa scrivere (o modificare) un programma una volta sola, @@ -30982,8 +31115,8 @@ relative al modo di leggere e di stampare dati di tipo numerico o valutario. @node Utilizzare @command{gettext} @section Il comando GNU @command{gettext} -@cindex internazionalizzare un programma -@cindex @command{gettext}, libreria +@cindex internazionalizzazione @subentry di programmi @command{awk} +@cindex @command{gettext} @subentry libreria @cindex libreria @command{gettext} @command{gawk} usa il comando GNU @command{gettext} per rendere disponibili le proprie funzionalit@`a di internazionalizzazione. @@ -30996,7 +31129,7 @@ non supporta il comando GNU @command{gettext}. Per questo motivo, queste funzionalit@`a non sono disponibili nel caso si stia lavorando con uno di questi sistemi operativi. Siamo spiacenti.} -@cindex portabilit@`a, libreria @command{gettext} e +@cindex portabilit@`a @subentry libreria @command{gettext} e Quando si usa il comando GNU @command{gettext}, ogni applicazione ha il proprio @dfn{dominio di testo}. Questo @`e un nome unico come, p.es., @samp{kpilot} o @samp{gawk}, @@ -31021,17 +31154,17 @@ necessita di traduzione. (P.es., l'opzione di @command{gawk} @option{--profile} dovrebbe restare immutata, a prescindere dalla lingua locale). -@cindex @code{textdomain()}, funzione (libreria C) -@cindex funzione @code{textdomain()} (libreria C) +@cindex @code{textdomain()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{textdomain()} @item Il programmatore indica il dominio di testo dell'applicazione (@command{"guide"}) alla libreria @command{gettext}, chiamando la funzione @code{textdomain()}. -@cindex @code{.pot}, file -@cindex file @code{.pot} -@cindex @dfn{portable object template} (.pot), file -@cindex file, @dfn{portable object template} (.pot) +@cindex @file{.pot} (file) +@cindex file @subentry @file{.pot} +@cindex @dfn{portable object template} (@file{.pot}) (file) +@cindex file @subentry @dfn{portable object template} (@file{.pot}) @item I messaggi dell'applicazione che vanno tradotti sono estratti dal codice sorgente e messi in un file di tipo @@ -31045,24 +31178,24 @@ tradotta @`e una stringa nulla). Il messaggio originale (normalmente in inglese) @`e utilizzato come chiave di riferimento per le traduzioni. -@cindex @code{.po}, file -@cindex file @code{.po} -@cindex @dfn{portable object} file (.po) -@cindex file, @dfn{portable object} (.po) +@cindex @file{.po} (file) +@cindex file @subentry @file{.po} +@cindex @dfn{portable object} file (@file{.po}) +@cindex file @subentry @dfn{portable object} (@file{.po}) @item Per ogni lingua per cui sia disponibile un traduttore, il file @file{guide.pot} @`e copiato in un file di tipo @dfn{portable object} [oggetto portabile] -(dal suffisso @code{.po}) +(dal suffisso @file{.po}) e le traduzioni sono effettuate su quel file, che viene distribuito con l'applicazione. Per esempio, potrebbe esserci un file @file{it.po} per la traduzione italiana. -@cindex @code{.gmo}, file -@cindex file @code{.gmo} -@cindex @dfn{message object} file (.mo) -@cindex file, @dfn{message object} (.mo) +@cindex @file{.gmo} (file) +@cindex file @subentry @file{.gmo} +@cindex @dfn{message object} file (@file{.mo}) +@cindex file @subentry @dfn{message object} (@file{.mo}) @item Il file @file{.po} di ogni lingua @`e convertito in un formato binario, detto @dfn{message object} (file @file{.gmo}). @@ -31074,17 +31207,17 @@ traduzioni quando l'applicazione viene eseguita. Quando @command{guide} @`e compilato e installato, i file binari contenenti le traduzioni sono installati in una directory standard. -@cindex @code{bindtextdomain()}, funzione (libreria C) -@cindex funzione @code{bindtextdomain()} (libreria C) +@cindex @code{bindtextdomain()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{bindtextdomain()} @item Durante la fase di prova e sviluppo, @`e possibile chiedere a @command{gettext} di usare un file @file{.gmo} in una directory diversa da quella standard, usando la funzione @code{bindtextdomain()}. -@cindex @code{.gmo}, file, specificare la directory di -@cindex file @code{.gmo}, specificare la directory di -@cindex @dfn{message object} file (.mo), specificare la directory di -@cindex file, @dfn{message object} (.mo), specificare la directory di +@cindex @file{.gmo} (file) @subentry specificare la directory di +@cindex file @subentry @file{.gmo} @subentry specificare la directory di +@cindex @dfn{message object} file (@file{.mo}) @subentry specificare la directory di +@cindex file @subentry @dfn{message object} (@file{.mo}) @subentry specificare la directory di @item Quando viene eseguito, il programma @command{awk} @command{guide} cerca ogni stringa da tradurre facendo una chiamata a @code{gettext()}. La stringa @@ -31097,8 +31230,8 @@ testo diverso da quello proprio dell'applicazione, senza dover altalenare fra questo secondo dominio e quello dell'applicazione. @end enumerate -@cindex @code{gettext()}, funzione (libreria C) -@cindex funzione @code{gettext()} (libreria C) +@cindex @code{gettext()} @subentry funzione di libreria C +@cindex funzione di libreria C @subentry @code{gettext()} In C (o C++), la marcatura della stringa la ricerca dinamica della traduzione si fanno inserendo ogni stringa da tradurre in una chiamata a @code{gettext()}: @@ -31110,8 +31243,8 @@ printf("%s", gettext("Don't Panic!\n")); Gli strumenti software che estraggono messaggi dal codice sorgente individuano tutte le stringhe racchiuse nelle chiamate a @code{gettext()}. -@cindex @code{_} (trattino basso), macro C -@cindex trattino basso (@code{_}), macro C +@cindex @code{_} (trattino basso) @subentry macro C +@cindex trattino basso (@code{_}) @subentry macro C Gli sviluppatori del comando GNU @command{gettext}, riconoscendo che continuare a immettere @samp{gettext(@dots{})} @`e sia faticoso che poco elegante da vedere, usano la macro @samp{_} (un trattino basso) per @@ -31125,10 +31258,11 @@ facilitare la cosa: printf("%s", _("Don't Panic!\n")); @end example -@cindex internazionalizzazione, localizzazione, categorie di localizzazione -@cindex @command{gettext}, libreria, categorie di localizzazione -@cindex libreria @command{gettext}, categorie di localizzazione -@cindex categorie di localizzazione +@cindex internazionalizzazione @subentry localizzazione @subentry categorie di localizzazione +@cindex @command{gettext} @subentry libreria @subentry categorie di localizzazione +@cindex libreria @command{gettext} @subentry categorie di localizzazione +@cindex categoria di localizzazione +@cindex localizzazione @subentry categorie di @noindent Questo permette di ridurre la digitazione extra a solo tre caratteri per ogni stringa da tradurre e inoltre migliora di molto la leggibit@`a. @@ -31138,24 +31272,24 @@ legate a una particolare localizzazione. Le categorie di localizzazione note a @command{gettext} sono: @table @code -@cindex @code{LC_MESSAGES}, categoria di localizzazione -@cindex categoria di localizzazione @code{LC_MESSAGES} +@cindex @code{LC_MESSAGES} (variabile d'ambiente) @subentry categoria di localizzazione +@cindex categoria di localizzazione @subentry @code{LC_MESSAGES} (variabile d'ambiente) @item LC_MESSAGES Testo dei messaggi. Questa @`e la categoria di default usata all'interno di @command{gettext}, ma @`e possibile specificarne esplicitamente una differente, se necessario. (Questo non @`e quasi mai necessario.) @cindex ordinare caratteri in lingue differenti -@cindex @code{LC_COLLATE}, categoria di localizzazione -@cindex categoria di localizzazione @code{LC_COLLATE} +@cindex @code{LC_COLLATE} (variabile d'ambiente) @subentry categoria di localizzazione +@cindex categoria di localizzazione @subentry @code{LC_COLLATE} (variabile d'ambiente) @item LC_COLLATE Informazioni sull'ordinamento alfabetico (cio@`e, come caratteri diversi e/o gruppi di carattere sono ordinati in un dato linguaggio). @c ad esempio i vari caratteri accentati in italiano, vanno ordinati @c insieme alla loro lettera "principale" (e @`e @'e). -@cindex @code{LC_CTYPE}, categoria di localizzazione -@cindex categoria di localizzazione @code{LC_CTYPE} +@cindex @code{LC_CTYPE} (variabile d'ambiente) @subentry categoria di localizzazione +@cindex categoria di localizzazione @subentry @code{LC_CTYPE} (variabile d'ambiente) @item LC_CTYPE Informazioni sui singoli caratteri (alfabetico, numerico, maiuscolo o minuscolo, etc.), come pure sulla codifica dei caratteri. @@ -31173,19 +31307,21 @@ definite nello standard POSIX, nelle espressioni regolari, come p. es. @code{/[[:alnum:]]/} (@pxref{Espressioni tra parentesi quadre}). -@cindex informazioni di tipo monetario, localizzazione -@cindex monete, simboli di, nella localizzazione -@cindex simboli di monete, nella localizzazione -@cindex monete, rappresentazioni di, nella localizzazione -@cindex rappresentazioni di monete, nella localizzazione -@cindex @code{LC_MONETARY}, categoria di localizzazione -@cindex categoria di localizzazione @code{LC_MONETARY} +@cindex informazioni di tipo monetario @subentry localizzazione +@cindex monete @subentry simboli di (nella localizzazione) +@cindex simboli di monete (nella localizzazione) +@cindex monete @subentry rappresentazioni di (nella localizzazione) +@cindex internazionalizzazione @subentry localizzazione @subentry informazioni di tipo monetario +@cindex internazionalizzazione @subentry localizzazione @subentry simboli di monete +@cindex rappresentazioni di monete (nella localizzazione) +@cindex @code{LC_MONETARY} (variabile d'ambiente) @subentry categoria di localizzazione +@cindex categoria di localizzazione @subentry @code{LC_MONETARY} (variabile d'ambiente) @item LC_MONETARY Le informazioni di tipo monetario, quali il simbolo della moneta, e se il simbolo va prima o dopo il valore numerico. -@cindex @code{LC_NUMERIC}, categoria di localizzazione -@cindex categoria di localizzazione @code{LC_NUMERIC} +@cindex @code{LC_NUMERIC} (variabile d'ambiente) @subentry categoria di localizzazione +@cindex categoria di localizzazione @subentry @code{LC_NUMERIC} (variabile d'ambiente) @item LC_NUMERIC Informazioni di tipo numerico, quali il carattere da usare per separare le cifre decimali e quello per separare le migliaia.@footnote{Gli americani usano @@ -31193,26 +31329,26 @@ una virgola ogni tre cifre decimali, e un punto per separare la parte decimale di un numero, mentre molti europei (fra cui gli italiani) fanno esattamente l'opposto: 1,234.56 invece che 1.234,56.} -@cindex tempo, localizzazione e -@cindex date, informazioni relative alla localizzazione -@cindex @code{LC_TIME}, categoria di localizzazione -@cindex categoria di localizzazione @code{LC_TIME} +@cindex tempo @subentry localizzazione e +@cindex date @subentry informazioni relative alla localizzazione +@cindex @code{LC_TIME} (variabile d'ambiente) @subentry categoria di localizzazione +@cindex categoria di localizzazione @subentry @code{LC_TIME} (variabile d'ambiente) @item LC_TIME Informazioni relative alle date e alle ore, come l'uso di ore nel formato a 12 ore oppure a 24 ore, il mese stampato prima o dopo il giorno in una data, le abbreviazioni dei mesi nella lingua locale, e cos@`{@dotless{i}} via. -@cindex @code{LC_ALL}, categoria di localizzazione -@cindex categoria di localizzazione @code{LC_ALL} +@cindex @code{LC_ALL} (variabile d'ambiente) @subentry categoria di localizzazione +@cindex categoria di localizzazione @subentry @code{LC_ALL} (variabile d'ambiente) @item LC_ALL Tutte le categorie viste sopra. (Non molto utile nel contesto del comando @command{gettext}.) @end table @quotation NOTA -@cindex @env{LANGUAGE}, variabile d'ambiente -@cindex variabile d'ambiente @env{LANGUAGE} +@cindex @env{LANGUAGE} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{LANGUAGE} Come descritto in @ref{Localizzazioni}, le variabili d'ambiente che hanno lo stesso nome delle categorie di localizzazione (@env{LC_CTYPE}, @env{LC_ALL}, etc.) influenzano il comportamento di @@ -31230,6 +31366,8 @@ definita, e, in questo caso, va usato il comando @command{unset} per rimuoverla. @end quotation +@cindex @env{GAWK_LOCALE_DIR} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{GAWK_LOCALE_DIR} Per il test di traduzioni dei messaggi inviati da @command{gawk} stesso, si pu@`o impostare la variabile d'ambiente @env{GAWK_LOCALE_DIR}. Si veda la documentazione per la funzione C @code{bindtextdomain()}, e si veda anche @@ -31237,21 +31375,21 @@ documentazione per la funzione C @code{bindtextdomain()}, e si veda anche @node I18N per programmatore @section Internazionalizzare programmi @command{awk} -@cindex programmi @command{awk}, internazionalizzare -@cindex internazionalizzazione di programmi @command{awk} +@cindex programmi @command{awk} @subentry internazionalizzare +@cindex internazionalizzazione @subentry di programmi @command{awk} @command{gawk} prevede le seguenti variabili per l'internazionalizzazione: @table @code -@cindex @code{TEXTDOMAIN}, variabile -@cindex variabile @code{TEXTDOMAIN} +@cindex @code{TEXTDOMAIN} (variabile) +@cindex variabile @subentry @code{TEXTDOMAIN} @item TEXTDOMAIN Questa variabile indica il dominio di testo dell'applicazione. Per compatibilit@`a con il comando GNU @command{gettext}, il valore di default @`e @code{"messages"}. -@cindex internazionalizzazione, localizzazione, stringhe marcate -@cindex stringhe, marcare per localizzazione +@cindex internazionalizzazione @subentry localizzazione @subentry stringhe marcate +@cindex stringa @subentry marcata @subentry per localizzazione @item _"questo @`e un messaggio da tradurre" Costanti di tipo stringa marcate con un trattino basso iniziale sono candidate per essere tradotte al momento dell'esecuzione del @@ -31306,10 +31444,10 @@ Il valore di default per @var{categoria} @`e @code{"LC_MESSAGES"}. Valgono le stesse osservazioni riguardo all'ordine degli argomenti fatte a proposito della funzione @code{dcgettext()}. -@cindex @code{.gmo}, file, specificare la directory di -@cindex file @code{.gmo}, specificare la directory di -@cindex @dfn{message object} file (.mo), specificare la directory di -@cindex file, @dfn{message object} (.mo), specificare la directory di +@cindex @file{.gmo} (file) @subentry specificare la directory di +@cindex file @subentry @file{.gmo} @subentry specificare la directory di +@cindex @dfn{message object} file (@file{.mo}) @subentry specificare la directory di +@cindex file @subentry @dfn{message object} (@file{.mo}) @subentry specificare la directory di @cindexgawkfunc{bindtextdomain} @item @code{bindtextdomain(@var{directory}} [@code{,} @var{dominio} ]@code{)} Cambia la directory nella quale @@ -31328,10 +31466,10 @@ Per usare queste funzionalit@`a in un programma @command{awk}, va seguita la procedura qui indicata: @enumerate -@cindex @code{BEGIN}, criterio di ricerca, variabile @code{TEXTDOMAIN} e -@cindex criterio di ricerca @code{BEGIN}, variabile @code{TEXTDOMAIN} e -@cindex @code{TEXTDOMAIN}, variabile, criterio di ricerca @code{BEGIN} e -@cindex variabile @code{TEXTDOMAIN}, criterio di ricerca @code{BEGIN} e +@cindex @code{BEGIN} (regola) @subentry variabile @code{TEXTDOMAIN} e +@cindex regola @subentry @code{BEGIN} @subentry variabile @code{TEXTDOMAIN} e +@cindex @code{TEXTDOMAIN} (variabile) @subentry @code{BEGIN} (regola) e +@cindex variabile @subentry @code{TEXTDOMAIN} @subentry @code{BEGIN} (regola) e @item Impostare la variabile @code{TEXTDOMAIN} al dominio di testo del programma. @`E meglio fare ci@`o all'interno di una regola @code{BEGIN} @@ -31346,8 +31484,8 @@ BEGIN @{ @} @end example -@cindex @code{_} (trattino basso), stringa traducibile -@cindex trattino basso (@code{_}), stringa traducibile +@cindex @code{_} (trattino basso) @subentry stringa traducibile +@cindex trattino basso (@code{_}) @subentry stringa traducibile @item Marcare tutte le stringhe traducibili anteponendo loro un trattino basso (@samp{_}). Il trattino @emph{deve} essere adiacente ai @@ -31393,7 +31531,7 @@ printf(messaggio, numero_clienti) @end example -@cindex @code{LC_MESSAGES}, categoria di localizzazione, funzione @code{bindtextdomain()} di (@command{gawk}) +@cindex @code{LC_MESSAGES} (variabile d'ambiente) @subentry categoria di localizzazione @subentry funzione @code{bindtextdomain()} di (@command{gawk}) @item In fase di sviluppo, si pu@`o scegliere di tenere il file @file{.gmo} in una directory a parte, solo per provarlo. Ci@`o si fa @@ -31421,10 +31559,10 @@ e usare traduzioni nei programmi @command{awk}. @node I18N per traduttore @section Traduzione dei programmi @command{awk} -@cindex @code{.po}, file -@cindex file @code{.po} -@cindex @dfn{portable object} file (.po) -@cindex file, @dfn{portable object} (.po) +@cindex @file{.po} (file) +@cindex file @subentry @file{.po} +@cindex @dfn{portable object} file (@file{.po}) +@cindex file @subentry @dfn{portable object} (@file{.po}) Dopo aver marcato le stringhe che si desidera tradurre in un programma, queste vanno estratte per creare il file iniziale @file{.pot}. Durante la traduzione, @`e spesso utile modificare l'ordine nel quale @@ -31444,17 +31582,17 @@ in fase di esecuzione. @node Estrazione di stringhe @subsection Estrarre stringhe marcate -@cindex stringhe, estrazione di -@cindex @option{--gen-pot}, opzione -@cindex opzione @option{--gen-pot} -@cindex opzioni sulla riga di comando, estrazione stringhe -@cindex riga di comando, opzioni, estrazione stringhe -@cindex stringhe marcate, estrazione di (internazionalizzazione) -@cindex marcate, estrazione di stringhe (internazionalizzazione) +@cindex stringa @subentry estrazione di +@cindex @option{--gen-pot} (opzione) +@cindex opzione @subentry @option{--gen-pot} +@cindex opzioni @subentry sulla riga di comando @subentry estrazione stringhe +@cindex riga di comando @subentry opzioni @subentry estrazione stringhe +@cindex stringa @subentry marcata @subentry estrazione di (internazionalizzazione) +@cindex marcate @subentry estrazione di stringhe (internazionalizzazione) @cindex estrazione di stringhe marcate (internazionalizzazione) -@cindex @option{--gen-pot}, opzione -@cindex opzione @option{--gen-pot} +@cindex @option{--gen-pot} (opzione) +@cindex opzione @subentry @option{--gen-pot} Una volta che il programma @command{awk} funziona, e tutte le stringhe sono state marcate ed @`e stato impostato (e forse fissato) il dominio di testo, @`e ora di preparare le traduzioni. @@ -31465,8 +31603,8 @@ si crea il file iniziale @file{.pot}: gawk --gen-pot -f guide.awk > guide.pot @end example -@cindex @code{xgettext}, programma di utilit@`a -@cindex programma di utilit@`a @code{xgettext} +@cindex @code{xgettext} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @code{xgettext} Quando viene chiamato specificando @option{--gen-pot}, @command{gawk} non esegue il programma. Il programma viene esaminato come al solito, e tutte le stringhe che sono state marcate per essere tradotte vengono scritte nello @@ -31488,10 +31626,10 @@ traduzioni per il programma @command{guide}. @node Ordinamento di printf @subsection Riordinare argomenti di @code{printf} -@cindex @code{printf}, istruzione, specificatori di posizione -@cindex istruzione @code{printf}, specificatori posizionali -@cindex posizionali, specificatori, istruzione @code{printf} -@cindex specificatori posizionali, istruzione @code{printf} +@cindex @code{printf} (istruzione) @subentry specificatori di posizione +@cindex istruzione @subentry @code{printf} @subentry specificatori di posizione +@cindex posizione @subentry specificatori di @subentry istruzione @code{printf} +@cindex specificatori di posizione @subentry istruzione @code{printf} Le stringhe di formattazione per @code{printf} e @code{sprintf()} (@pxref{Printf}) hanno un problema speciale con le traduzioni. @@ -31517,13 +31655,13 @@ nella chiamata a @code{printf}. Per risolvere questo problema, gli specificatori di formato di @code{printf} possono avere un elemento in pi@`u, opzionale, detto @dfn{specificatore -posizionale}. Per esempio: +di posizione}. Per esempio: @example "%2$d @`e la lunghezza della stringa `%1$s'\n" @end example -Qui, lo specificatore posizionale consiste in un numero intero, che indica +Qui, lo specificatore di posizione consiste in un numero intero, che indica quale argomento utilizzare, seguito da un carattere @samp{$}. I numeri partono da uno, e la stringa di formattazione vera e propria @emph{non} @`e inclusa. Quindi, nell'esempio seguente, @samp{stringa} @`e @@ -31538,10 +31676,10 @@ $ @kbd{gawk 'BEGIN @{} @print{} 16 caratteri compongono "Non v\47allarmate!" @end example -Se presenti, gli specificatori posizionali precedono, nella specifica di +Se presenti, gli specificatori di posizione precedono, nella specifica di formato, i flag, la larghezza del campo e/o la precisione. -Gli specificatori posizionali possono essere usati anche se si specifica una +Gli specificatori di posizione possono essere usati anche se si specifica una larghezza dinamica dei campi, e della capacit@`a di precisione: @example @@ -31554,19 +31692,19 @@ $ @kbd{gawk 'BEGIN @{} @end example @quotation NOTA -Se si usa @samp{*} con uno specificatore posizionale, il carattere @samp{*} +Se si usa @samp{*} con uno specificatore di posizione, il carattere @samp{*} viene per primo, seguito dal numero che indica la posizione, a sua volta seguito dal @samp{$}. Ci@`o pu@`o parere poco intuitivo. @end quotation -@cindex istruzione @code{printf}, specificatori posizionali, frammisti a formati standard -@cindex @code{printf}, istruzione, specificatori posizionali, frammisti a formati standard -@cindex specificatori posizionali, istruzione @code{printf}, frammisti a formati standard -@cindex formato, specificatori di, frammisti a specificatori posizionali non standard -@cindex specificatori di formato, frammisti a specificatori posizionali non standard +@cindex istruzione @subentry @code{printf} @subentry specificatori di posizione, frammisti a formati standard +@cindex @code{printf} (istruzione) @subentry specificatori di posizione @subentry frammisti a formati standard +@cindex specificatori di posizione @subentry istruzione @code{printf} @subentry frammisti a formati standard +@cindex formato @subentry specificatori di posizione @subentry frammisti a specificatori non standard +@cindex specificatori di formato @subentry frammisti a specificatori di posizione non standard @command{gawk} non consente di mischiare specificatori di formato standard -con altri contenenti degli specificatori posizionali in una stessa stringa di +con altri contenenti degli specificatori di posizione in una stessa stringa di formato: @example @@ -31585,7 +31723,7 @@ Rimane sempre una pessima idea quella di tentare di mischiare i formati, anche se @command{gawk} non riesce ad accorgersene. @end quotation -Sebbene gli specificatori posizionali possano essere usati direttamente nei +Sebbene gli specificatori di posizione possano essere usati direttamente nei programmi @command{awk}, il motivo per cui sono stati introdotti @`e perch@'e siano d'aiuto nel produrre traduzioni corrette della stringa di formattazione in lingue differenti da quella nella quale il programma @`e stato @@ -31594,8 +31732,8 @@ originariamente scritto. @node Portabilit@`a nell'I18N @subsection Problemi di portabilit@`a a livello di @command{awk} -@cindex portabilit@`a, internazionalizzazione e -@cindex internazionalizzazione, localizzazione, portabilit@`a e +@cindex portabilit@`a @subentry internazionalizzazione e +@cindex internazionalizzazione @subentry localizzazione @subentry portabilit@`a e Le funzionalit@`a di internazionalizzazione di @command{gawk} sono state appositamente implementate per avere il minimo impatto possibile sulla portabilit@`a, verso altre versioni di @command{awk}, dei programmi @@ -31617,8 +31755,8 @@ Per il modo in cui @`e scritto, non funzioner@`a con altre versioni di Tuttavia, @`e in realt@`a quasi portabile, e richiede modifiche minime: @itemize @value{BULLET} -@cindex @code{TEXTDOMAIN}, variabile, portabilit@`a e -@cindex variabile @code{TEXTDOMAIN}, portabilit@`a e +@cindex @code{TEXTDOMAIN} (variabile) @subentry portabilit@`a e +@cindex variabile @subentry @code{TEXTDOMAIN} @subentry portabilit@`a e @item Le assegnazioni di valori a @code{TEXTDOMAIN} non avranno effetto alcuno, perch@'e @code{TEXTDOMAIN} non @`e una variabile speciale in altre @@ -31640,12 +31778,12 @@ pu@`o essere reso eseguibile, ma tutti i messaggi verranno inviati nella lingua originale del programma. Per esempio: -@cindex @code{bindtextdomain()}, funzione (@command{gawk}), portabilit@`a e -@cindex funzione @code{bindtextdomain()} (@command{gawk}), portabilit@`a e -@cindex @code{dcgettext()}, funzione (@command{gawk}), portabilit@`a e -@cindex funzione @code{dcgettext()} (@command{gawk}), portabilit@`a e -@cindex @code{dcngettext()}, funzione (@command{gawk}), portabilit@`a e -@cindex funzione @code{dcngettext()} (@command{gawk}), portabilit@`a e +@cindex @code{bindtextdomain()} (funzione @command{gawk}) @subentry portabilit@`a e +@cindex funzione @subentry @code{bindtextdomain()} (@command{gawk}) @subentry portabilit@`a e +@cindex @code{dcgettext()} (funzione @command{gawk}) @subentry portabilit@`a e +@cindex funzione @subentry @code{dcgettext()} (@command{gawk}) @subentry portabilit@`a e +@cindex @code{dcngettext()} (funzione @command{gawk}) @subentry portabilit@`a e +@cindex funzione @subentry @code{dcngettext()} (@command{gawk}) @subentry portabilit@`a e @example @c file eg/lib/libintl.awk function bindtextdomain(dir, domain) @@ -31666,17 +31804,17 @@ function dcngettext(string1, string2, number, domain, category) @end example @item -L'uso di specificazioni posizionali in @code{printf} o +L'uso di specificazioni di posizione in @code{printf} o @code{sprintf()} @emph{non} @`e portabile. Per supportare @code{gettext()} nella programmazione in linguaggio C, -molte versioni C di @code{sprintf()} supportano specificatori posizionali. +molte versioni C di @code{sprintf()} supportano specificatori di posizione. Ma la cosa funziona solo se nella chiamata di funzione sono stati specificati argomenti a sufficienza. Molte versioni di @command{awk} passano i formati e gli argomenti di @code{printf}, senza modificarli, alla funzione di libreria in linguaggio C @code{sprintf()}, ma solo un formato e un argomento alla volta. Quel che succede se si usa una -specificazione posizionale resta indeterminato. -Tuttavia, poich@'e le specificazioni posizionali sono usate principalmente +specificazione di posizione resta indeterminato. +Tuttavia, poich@'e le specificazioni di posizione sono usate principalmente per le stringhe di formattazione @emph{tradotte}, e poich@'e le versioni non-GNU di @command{awk} non utilizzano mai le stringhe tradotte, ci@`o non dovrebbe, in pratica, causare problemi. @@ -31762,7 +31900,6 @@ msgstr "Like, the scoop is" @c endfile @end example -@cindex Linux @cindex GNU/Linux @quotation NOTA Le istruzione che seguono valgono per un ambiente GNU/Linux con la @@ -31779,6 +31916,14 @@ La directory ha un nome del tipo @file{@var{locale}/LC_MESSAGES}, dove @var{locale} @`e un nome di localizzazione noto alle routine C di @command{gettext}. +@cindex @env{LANGUAGE} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{LANGUAGE} +@cindex @env{LC_ALL} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{LC_ALL} +@cindex @env{LANG} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{LANG} +@cindex @env{LC_MESSAGES} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{LC_MESSAGES} Come sapere quale localizzazione usare? Le routine C di @command{gettext} usano quattro variabili d'ambiente. Esse sono, nell'ordine: @env{$LANGUAGE}, @env{$LC_ALL}, @env{$LANG}, e @@ -31799,16 +31944,16 @@ Il passo succesivo @`e creare le directory: $ @kbd{mkdir en_US.UTF-8 en_US.UTF-8/LC_MESSAGES} @end example -@cindex @code{.po}, file, conversione in @code{.mo} -@cindex file @code{.po}, conversione in @code{.mo} -@cindex @code{.mo}, file, conversione da @code{.po} -@cindex file @code{.mo}, conversione da @code{.po} -@cindex @dfn{portable object} file (.po), conversione in @dfn{message object} file -@cindex file, @dfn{portable object} (.po), conversione in @dfn{message object} file -@cindex @dfn{message object} file (.mo), conversione da @dfn{portable object} file -@cindex file, @dfn{message object} (.mo), conversione da @dfn{portable object} file -@cindex @command{msgfmt}, programma di utilit@`a -@cindex programma di utilit@`a @command{msgfmt} +@cindex @file{.po} (file) @subentry conversione in @file{.mo} +@cindex file @subentry @file{.po} @subentry conversione in @file{.mo} +@cindex @file{.mo} (file) @subentry conversione da @file{.po} +@cindex file @subentry @file{.mo} @subentry conversione da @file{.po} +@cindex @dfn{portable object} file (@file{.po}) @subentry conversione in @dfn{message object} file +@cindex file @subentry @dfn{portable object} (@file{.po}) @subentry conversione in @dfn{message object} file +@cindex @dfn{message object} file (@file{.mo}) @subentry conversione da @dfn{portable object} file +@cindex file @subentry @dfn{message object} (@file{.mo}) @subentry conversione da @dfn{portable object} file +@cindex @command{msgfmt} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{msgfmt} Il programma di utilit@`a @command{msgfmt} effettua la conversione del file leggibile, in formato testo, @file{.po} nel file, in formato binario, @file{.mo}. @@ -31891,7 +32036,7 @@ compilati in file @file{.gmo} che saranno usati in fase di esecuzione del programma. @item -@`E possibile usare specificazioni posizionali con le istruzioni +@`E possibile usare specificazioni di posizione con le istruzioni @code{sprintf()} e @code{printf} per modificare la posizione del valore degli argomenti nelle stringhe di formato e nell'output. Ci@`o @`e utile nella traduzione di stringhe di @@ -31911,7 +32056,8 @@ esecuzione. @node Debugger @chapter Effettuare il debug dei programmi @command{awk} -@cindex debug dei programmi @command{awk} +@cindex debug @subentry dei programmi @command{awk} +@cindex programmi @command{awk} @subentry debug dei @c The original text for this chapter was contributed by Efraim Yawitz. @@ -31963,7 +32109,7 @@ In quel caso, cosa ci si pu@`o aspettare da un tale strumento? La risposta dipende dal linguaggio su cui si effettua il debug, comunque in generale ci si pu@`o attendere almeno questo: -@cindex debugger, funzionalit@`a del +@cindex debugger @subentry funzionalit@`a del @itemize @value{BULLET} @item La possibilit@`a di osservare l'esecuzione delle istruzioni di un programma una @@ -31997,18 +32143,18 @@ l'autore, o anche di un programma scritto da altri). @node Terminologia nel debug @subsection Concetti fondamentali sul debug -@cindex debugger, terminologia +@cindex debugger @subentry terminologia Prima di entrare nei dettagli, dobbiamo introdurre diversi importanti concetti che valgono per tutti i debugger. La seguente lista definisce i termini usati nel resto di questo @value{CHAPTER}: @table @dfn -@cindex @dfn{stack} di chiamata (debugger) -@cindex debugger, @dfn{stack} di chiamata -@cindex debugger, pila di chiamata +@cindex @dfn{stack} (pila) delle chiamate @subentry nel debugger +@cindex debugger @subentry @dfn{stack} di chiamata +@cindex debugger @subentry pila di chiamata @cindex @dfn{stack frame} (debugger) -@cindex debugger, @dfn{stack frame} +@cindex debugger @subentry @dfn{stack frame} @item Stack frame Durante la loro esecuzione i programmi normalmente chiamano delle funzioni. Una funzione pu@`o a sua volta chiamarne un'altra, o pu@`o richiamare se stessa @@ -32033,10 +32179,10 @@ invocata. I comandi che stampano la pila delle chiamate stampano anche le informazioni su ogni @dfn{stack frame} (come vedremo pi@`u avanti in dettaglio). @item Punto d'interruzione -@cindex @dfn{breakpoint} (debugger) -@cindex punto d'interruzione (debugger) -@cindex debugger, @dfn{breakpoint} -@cindex debugger, punto d'interruzione +@cindex @code{breakpoint} (comando del debugger) +@cindex punto d'interruzione @subentry (@code{breakpoint}) +@cindex debugger @subentry @code{breakpoint} +@cindex debugger @subentry punto d'interruzione Durante le operazioni di debug, spesso si preferisce lasciare che il programma venga eseguito finch@'e non raggiunge un certo punto, e da quel punto in poi si continua l'esecuzione un'istruzione alla volta. Il modo per farlo @`e quello di @@ -32048,9 +32194,9 @@ vogliono. @item Punto d'osservazione @cindex @dfn{watchpoint} (debugger) -@cindex punto d'interruzione (debugger) -@cindex debugger, @dfn{watchpoint} -@cindex debugger, punto d'interruzione +@cindex punto d'osservazione @subetry(@code{watchpoint}) +@cindex debugger @subentry @code{watchpoint} +@cindex debugger @subentry punto d'osservazione Un punto d'osservazione @`e simile a un punto d'interruzione. La differenza @`e che i punti d'interruzione sono orientati attorno al codice; fermano il programma quando viene raggiunto un certo punto nel codice. Un punto @@ -32088,8 +32234,8 @@ macchina.} @node Esempio di sessione di debug @section Esempio di sessione di debug di @command{gawk} -@cindex esempio di sessione di debug -@cindex debug, esempio di sessione +@cindex esempio @subentry di sessione di debug +@cindex debug @subentry esempio di sessione Per illustrare l'uso di @command{gawk} come debugger, vediamo un esempio di sessione di debug. Come esempio verr@`a usata un'implementazione @command{awk} @@ -32105,8 +32251,8 @@ uniq}). @node Invocazione del debugger @subsection Come avviare il debugger @cindex avviare il debugger -@cindex debugger, come avviarlo -@cindex debugger, comandi del, si veda comando del debugger +@cindex debugger @subentry come avviarlo +@cindex debugger @subentry comandi del @seeentry{comando del debugger} Per avviare il debugger in @command{gawk} si richiama il comando esattamente come al solito, specificando solo un'opzione aggiuntiva, @@ -32131,7 +32277,7 @@ programma nella riga di comando al debugger piuttosto che come parte del comando @code{run} al prompt del debugger.) L'opzione @option{-1} @`e un'opzione per @file{uniq.awk}. -@cindex debugger, prompt +@cindex debugger @subentry prompt @cindex prompt del debugger Invece di eseguire direttamente il programma sul @file{file_di_input}, come @command{gawk} farebbe normalmente, il debugger semplicemente carica @@ -32182,13 +32328,13 @@ ragionevole per un punto d'interruzione in @file{uniq.awk} @`e all'inizio della funzione @code{se_sono_uguali()}, che confronta la riga corrente con la precedente. Per impostare il punto d'interruzione, usare il comando @code{b} (@dfn{breakpoint}): -@cindex debugger, impostare un punto d'interruzione -@cindex @code{breakpoint}, comando del debugger -@cindex comando del debugger, @code{breakpoint} -@cindex @code{break}, comando del debugger -@cindex comando del debugger, @code{break} -@cindex @code{b}, comando del debugger -@cindex comando del debugger, @code{b} +@cindex debugger @subentry impostare un punto d'interruzione +@cindex @code{breakpoint} (comando del debugger) +@cindex comando del debugger @subentry @code{breakpoint} +@cindex @code{break} (comando del debugger) +@cindex comando del debugger @subentry @code{break} +@cindex @code{b} (comando del debugger) +@cindex comando del debugger @subentry @code{b} (alias per @code{break}) @example gawk> @kbd{b se_sono_uguali} @print{} Breakpoint 1 impostato al file `uniq.awk', riga 63 @@ -32198,9 +32344,9 @@ Il debugger mostra il file e il numero di riga dove si trova il punto d'interruzione. Ora bisogna immettere @samp{r} o @samp{run} e il programma viene eseguito fino al primo punto d'interruzione: -@cindex debugger, eseguire il programma -@cindex comando del debugger, @code{run} -@cindex @code{run}, comando del debugger +@cindex debugger @subentry eseguire il programma +@cindex comando del debugger @subentry @code{run} +@cindex @code{run} (comando del debugger) @example gawk> @kbd{r} @print{} Partenza del programma: @@ -32217,11 +32363,11 @@ Prima di tutto, vediamo come siamo arrivati a questo punto. Sulla riga di comando battiamo @samp{bt} (che sta per ``backtrace''), e il debugger risponde con un listato degli @dfn{stack frame} correnti: -@cindex debugger, elementi pila, visualizzazione -@cindex comando del debugger, @code{bt} -@cindex @code{bt}, comando del debugger -@cindex comando del debugger, @code{backtrace} -@cindex @code{backtrace}, comando del debugger +@cindex debugger @subentry elementi pila @subentry visualizzazione +@cindex comando del debugger @subentry @code{bt} (alias per @code{backtrace}) +@cindex @code{bt} (comando del debugger) @subentry (alias per @code{backtrace}) +@cindex comando del debugger @subentry @code{backtrace} +@cindex @code{backtrace} (comando del debugger) @example gawk> @kbd{bt} @print{} #0 se_sono_uguali(n, m, campi_ultima, campi_corrente, @@ -32243,10 +32389,10 @@ alcune variabili. Immaginiamo di battere @samp{p n} @code{n}, un parametro di @code{se_sono_uguali()}. In realt@`a, il debugger ci d@`a: -@cindex comando del debugger, @code{print} -@cindex @code{print}, comando del debugger -@cindex comando del debugger, @code{p} -@cindex @code{p}, comando del debugger +@cindex comando del debugger @subentry @code{print} +@cindex @code{print} (comando del debugger) +@cindex comando del debugger @subentry @code{p} (alias per @code{print}) +@cindex @code{p} (comando del debugger) @subentry (alias per @code{print}) @example gawk> @kbd{p n} @print{} n = untyped variable @@ -32298,10 +32444,10 @@ ulteriormente, iniziamo a ``scorrere una ad una'' le righe di @code{se_sono_uguali()}. Cominciamo col battere @samp{n} (per ``next'' [successivo]): -@cindex comando del debugger, @code{n} -@cindex @code{n}, comando del debugger -@cindex comando del debugger, @code{next} -@cindex @code{next}, comando del debugger +@cindex comando del debugger @subentry @code{n} (alias per @code{next}) +@cindex @code{n} (comando del debugger) @subentry (alias per @code{next}) +@cindex comando del debugger @subentry @code{next} +@cindex @code{next} (comando del debugger) @example @group gawk> @kbd{n} @@ -32349,8 +32495,8 @@ del vettore. Una prima possibilit@`a @`e quella di usare degli indici: -@cindex debugger, stampare singoli elementi di un vettore -@cindex stampare singoli elementi di un vettore, nel debugger +@cindex debugger @subentry stampare singoli elementi di un vettore +@cindex stampare @subentry singoli elementi di un vettore @subentry nel debugger @example gawk> @kbd{p vettore_ultima[0]} @print{} "0" non presente nel vettore `vettore_ultima' @@ -32368,8 +32514,8 @@ Questo metodo sarebbe piuttosto lento per un vettore con 100 elementi, per cui @command{gawk} fornisce una scorciatoia (che fa venire in mente un altro linguaggio che non nominiamo): -@cindex debugger, stampare tutti gli elementi di un vettore -@cindex stampare tutti gli elementi di un vettore, nel debugger +@cindex debugger @subentry stampare tutti gli elementi di un vettore +@cindex stampare @subentry tutti gli elementi di un vettore @subentry nel debugger @example gawk> @kbd{p @@vettore_ultima} @print{} vettore_ultima["1"] = "awk," @@ -32451,8 +32597,8 @@ Ottenere informazioni Comandi vari @end itemize -@cindex debugger, ripetere dei comandi -@cindex ripetere dei comandi, nel debugger +@cindex debugger @subentry ripetere dei comandi +@cindex ripetere dei comandi @subentry nel debugger Ciascuna di esse @`e trattata @ifnotinfo nelle seguenti @@ -32489,13 +32635,13 @@ programma verr@`a eseguito come se non fosse sotto il debugger. I comandi per controllare i punti d'interruzione sono: @table @asis -@cindex comando del debugger, @code{b} (alias per @code{break}) -@cindex comando del debugger, @code{break} -@cindex @code{break}, comando del debugger -@cindex @code{b}, comando del debugger (alias per @code{break}) -@cindex impostare un punto d'interruzione -@cindex breakpoint, impostare -@cindex punto d'interruzione (breakpoint), impostare +@cindex comando del debugger @subentry @code{b} (alias per @code{break}) +@cindex comando del debugger @subentry @code{break} +@cindex @code{break} (comando del debugger) +@cindex @code{b} (comando del debugger) @subentry (alias per @code{break}) +@cindex impostare @subentry un punto d'interruzione +@cindex @code{breakpoint} (comando del debugger) @subentry impostare +@cindex punto d'interruzione @subentry (@code{break}) @subentry impostare @item @code{break} [[@var{nome-file}@code{:}]@var{n} | @var{funzione}] [@code{"@var{espressione}"}] @itemx @code{b} [[@var{nome-file}@code{:}]@var{n} | @var{funzione}] [@code{"@var{espressione}"}] Senza argomenti, imposta un punto d'interruzione alla prossima istruzione @@ -32529,11 +32675,11 @@ valuta ogni volta che viene raggiunto quel punto d'interruzione. Se la condizione @`e vera, il debugger ferma l'esecuzione e rimane in attesa di un comando. Altrimenti, continua l'esecuzione del programma. -@cindex comando del debugger, @code{clear} -@cindex @code{clear}, comando del debugger -@cindex cancellare punto d'interruzione, in una determinata posizione -@cindex punto d'interruzione, cancellare in una determinata posizione -@cindex breakpoint in una determinata posizione, cancellare +@cindex comando del debugger @subentry @code{clear} +@cindex @code{clear} (comando del debugger) +@cindex cancellare punto d'interruzione @subentry in una determinata posizione +@cindex punto d'interruzione @subentry (@code{breakpoint}) @subentry cancellare in una determinata posizione +@cindex @code{breakpoint} (comando del debugger) @subentry in una determinata posizione @subentry cancellare @item @code{clear} [[@var{nome-file}@code{:}]@var{n} | @var{funzione}] Senza argomenti, cancella ogni eventuale punto d'interruzione all'istruzione successiva @@ -32557,8 +32703,8 @@ Cancella il punto (o i punti) d'interruzione impostato/i all'ingresso della funzione @var{funzione}. @end table -@cindex comando del debugger, @code{condition} -@cindex @code{condition}, comando del debugger +@cindex comando del debugger @subentry @code{condition} +@cindex @code{condition} (comando del debugger) @cindex condizione dei punti d'interruzione @item @code{condition} @var{n} @code{"@var{espressione}"} Aggiunge una condizione al punto d'interruzione o al punto d'osservazione @@ -32571,31 +32717,31 @@ della condizione non viene specificata, tutte le condizioni esistenti vengono rimosse (cio@`e, il punto d'interruzione o di osservazione viene considerato incondizionato). -@cindex comando del debugger, @code{d} (alias per @code{delete}) -@cindex comando del debugger, @code{delete} -@cindex @code{delete}, comando del debugger -@cindex @code{d}, comando del debugger (alias per @code{delete}) -@cindex cancellare punto d'interruzione, per numero -@cindex punto d'interruzione, cancellare per numero -@cindex breakpoint, cancellare per numero +@cindex comando del debugger @subentry @code{d} (alias per @code{delete}) +@cindex comando del debugger @subentry @code{delete} +@cindex @code{delete} (comando del debugger) +@cindex @code{d} (comando del debugger) @subentry (alias per @code{delete}) +@cindex cancellare punto d'interruzione @subentry per numero +@cindex punto d'interruzione @subentry (@code{breakpoint}) @subentry cancellare per numero +@cindex @code{breakpoint} (comando del debugger) @subentry cancellare per numero @item @code{delete} [@var{n1 n2} @dots{}] [@var{n}--@var{m}] @itemx @code{d} [@var{n1 n2} @dots{}] [@var{n}--@var{m}] Cancella i punti d'interruzione specificati o un intervallo di punti d'interruzione. Se non vengono forniti argomenti, cancella tutti i punti d'interruzione esistenti. -@cindex comando del debugger, @code{disable} -@cindex @code{disable}, comando del debugger +@cindex comando del debugger @subentry @code{disable} +@cindex @code{disable} (comando del debugger) @cindex disabilitare punto d'interruzione -@cindex punto d'interruzione, come disabilitare o abilitare +@cindex punto d'interruzione @subentry (@code{disable}) @subentry come disabilitare o abilitare @item @code{disable} [@var{n1 n2} @dots{} | @var{n}--@var{m}] Disabilita punti d'interruzione specificati o un intervallo di essi. Senza argomenti, disabilita tutti i punti d'interruzione. -@cindex comando del debugger, @code{e} (alias per @code{enable}) -@cindex comando del debugger, @code{enable} -@cindex @code{enable}, comando del debugger -@cindex @code{e}, comando del debugger (alias per @code{enable}) +@cindex comando del debugger @subentry @code{e} (alias per @code{enable}) +@cindex comando del debugger @subentry @code{enable} +@cindex @code{enable} (comando del debugger) +@cindex @code{e} (comando del debugger) @subentry (alias per @code{enable}) @cindex abilitare un punto d'interruzione @item @code{enable} [@code{del} | @code{once}] [@var{n1 n2} @dots{}] [@var{n}--@var{m}] @itemx @code{e} [@code{del} | @code{once}] [@var{n1 n2} @dots{}] [@var{n}--@var{m}] @@ -32614,19 +32760,19 @@ Abilita dei punti d'interruzione @dfn{una tantum}, poi li cancella quando il programma si ferma in quel punto. @end table -@cindex comando del debugger, @code{ignore} -@cindex @code{ignore}, comando del debugger +@cindex comando del debugger @subentry @code{ignore} +@cindex @code{ignore} (comando del debugger) @cindex ignorare un punto d'interruzione @item @code{ignore} @var{n} @var{contatore} Ignora il punto d'interruzione numero @var{n} le successive @var{contatore} volte in cui viene raggiunto. -@cindex comando del debugger, @code{t} (alias per @code{tbreak}) -@cindex comando del debugger, @code{tbreak} -@cindex @code{tbreak}, comando del debugger -@cindex @code{t}, comando del debugger (alias per @code{tbreak}) -@cindex punto d'interruzione temporaneo -@cindex temporaneo, punto d'interruzione +@cindex comando del debugger @subentry @code{t} (alias per @code{tbreak}) +@cindex comando del debugger @subentry @code{tbreak} +@cindex @code{tbreak} (comando del debugger) +@cindex @code{t} (comando del debugger) @subentry (alias per @code{tbreak}) +@cindex punto d'interruzione @subentry (@code{tbreak}) temporaneo +@cindex temporaneo @subentry punto d'interruzione @item @code{tbreak} [[@var{nome-file}@code{:}]@var{n} | @var{funzione}] @itemx @code{t} [[@var{nome-file}@code{:}]@var{n} | @var{funzione}] Imposta un punto d'interruzione temporaneo (abilitato solo per la prima volta @@ -32641,13 +32787,13 @@ programma, osservando il suo comportamento. Ci sono pi@`u comandi per controllare l'esecuzione del programma di quelli visti nei precedenti esempi: @table @asis -@cindex comando del debugger, @code{commands} -@cindex @code{commands}, comando del debugger -@cindex comando del debugger, @code{silent} -@cindex @code{silent}, comando del debugger -@cindex comando del debugger, @code{end} -@cindex @code{end}, comando del debugger -@cindex punto d'interruzione, comandi +@cindex comando del debugger @subentry @code{commands} +@cindex @code{commands} (comando del debugger) +@cindex comando del debugger @subentry @code{silent} +@cindex @code{silent} (comando del debugger) +@cindex comando del debugger @subentry @code{end} +@cindex @code{end} (comando del debugger) +@cindex punto d'interruzione @subentry comandi da eseguire al @cindex comandi da eseguire al punto d'interruzione @item @code{commands} [@var{n}] @itemx @code{silent} @@ -32676,11 +32822,11 @@ gawk> @kbd{commands} gawk> @end example -@cindex comando del debugger, @code{c} (alias per @code{continue}) -@cindex comando del debugger, @code{continue} -@cindex continuare esecuzione programma, nel debugger -@cindex debugger, continuare esecuzione programma -@cindex @code{continue}, comando del debugger +@cindex comando del debugger @subentry @code{c} (alias per @code{continue}) +@cindex comando del debugger @subentry @code{continue} +@cindex continuare esecuzione programma @subentry nel debugger +@cindex debugger @subentry continuare esecuzione programma +@cindex @code{continue} (comando del debugger) @item @code{continue} [@var{contatore}] @itemx @code{c} [@var{contatore}] Riprende l'esecuzione del programma. Se si riparte da un punto d'interruzione @@ -32688,33 +32834,33 @@ e viene specificato @var{contatore}, il punto d'interruzione in quella posizione viene ignorato per le prossime @var{contatore} volte prima di fermarsi nuovamente. -@cindex comando del debugger, @code{finish} -@cindex @code{finish}, comando del debugger +@cindex comando del debugger @subentry @code{finish} +@cindex @code{finish} (comando del debugger) @item @code{finish} Esegue fino a quando lo stack frame selezionato completa l'esecuzione. Stampa il valore restituito. -@cindex comando del debugger, @code{n} (alias per @code{next}) -@cindex comando del debugger, @code{next} -@cindex @code{next}, comando del debugger -@cindex @code{n}, comando del debugger (alias per @code{next}) -@cindex esecuzione di un solo passo, nel debugger +@cindex comando del debugger @subentry @code{n} (alias per @code{next}) +@cindex comando del debugger @subentry @code{next} +@cindex @code{next} (comando del debugger) +@cindex @code{n} (comando del debugger) @subentry (alias per @code{next}) +@cindex esecuzione di un solo passo @subentry nel debugger @item @code{next} [@var{contatore}] @itemx @code{n} [@var{contatore}] Continua l'esecuzione alla successiva riga sorgente, saltando le chiamate di funzione. L'argomento @var{contatore} controlla il numero di ripetizioni dell'azione, come in @code{step}. -@cindex comando del debugger, @code{ni} (alias per @code{nexti}) -@cindex comando del debugger, @code{nexti} -@cindex @code{nexti}, comando del debugger -@cindex @code{ni}, comando del debugger (alias for @code{nexti}) +@cindex comando del debugger @subentry @code{ni} (alias per @code{nexti}) +@cindex comando del debugger @subentry @code{nexti} +@cindex @code{nexti} (comando del debugger) +@cindex @code{ni} (comando del debugger) @subentry (alias for @code{nexti}) @item @code{nexti} [@var{contatore}] @itemx @code{ni} [@var{contatore}] Esegue una o @var{contatore} istruzioni, comprese le chiamate di funzione. -@cindex comando del debugger, @code{return} -@cindex @code{return}, comando del debugger +@cindex comando del debugger @subentry @code{return} +@cindex @code{return} (comando del debugger) @item @code{return} [@var{valore}] Cancella l'esecuzione di una chiamata di funzione. Se @var{valore} (una stringa o un numero) viene specificato, @`e usato come codice di ritorno della @@ -32723,10 +32869,10 @@ correntemente in esecuzione; cio@`e, il frame numero 0), ignora tutti i frame pi@`u interni di quello selezionato, e il chiamante del frame selezionato diventa il frame pi@`u interno. -@cindex comando del debugger, @code{r} (alias per @code{run}) -@cindex comando del debugger, @code{run} -@cindex @code{run}, comando del debugger -@cindex @code{r}, comando del debugger (alias per @code{run}) +@cindex comando del debugger @subentry @code{r} (alias per @code{run}) +@cindex comando del debugger @subentry @code{run} +@cindex @code{run} (comando del debugger) +@cindex @code{r} (comando del debugger) @subentry (alias per @code{run}) @item @code{run} @itemx @code{r} Avvia/riavvia l'esecuzione del programma. Quando il programma viene riavviato, @@ -32734,10 +32880,10 @@ il debugger mantiene i punti d'interruzione e di osservazione, la cronologia dei comandi, la visualizzazione automatica di variabili, e le opzioni del debugger. -@cindex comando del debugger, @code{s} (alias per @code{step}) -@cindex comando del debugger, @code{step} -@cindex @code{step}, comando del debugger -@cindex @code{s}, comando del debugger (alias per @code{step}) +@cindex comando del debugger @subentry @code{s} (alias per @code{step}) +@cindex comando del debugger @subentry @code{step} +@cindex @code{step} (comando del debugger) +@cindex @code{s} (comando del debugger) @subentry (alias per @code{step}) @item @code{step} [@var{contatore}] @itemx @code{s} [@var{contatore}] Continua l'esecuzione finch@'e il controllo non raggiunge una diversa riga del @@ -32746,10 +32892,10 @@ all'interno della riga. Se viene fornito l'argomento @var{contatore}, esegue il numero di istruzioni specificate prima di fermarsi, a meno che non s'imbatta in un punto d'interruzione o di osservazione. -@cindex comando del debugger, @code{si} (alias per @code{stepi}) -@cindex comando del debugger, @code{stepi} -@cindex @code{stepi}, comando del debugger -@cindex @code{si}, comando del debugger (alias per @code{stepi}) +@cindex comando del debugger @subentry @code{si} (alias per @code{stepi}) +@cindex comando del debugger @subentry @code{stepi} +@cindex @code{stepi} (comando del debugger) +@cindex @code{si} (comando del debugger) @subentry (alias per @code{stepi}) @item @code{stepi} [@var{contatore}] @itemx @code{si} [@var{contatore}] Esegue una o @var{contatore} istruzioni, comprese le chiamate di funzione. @@ -32757,10 +32903,10 @@ Esegue una o @var{contatore} istruzioni, comprese le chiamate di funzione. si veda l'output mostrato sotto @code{dump} nella @ref{Comandi vari del debugger}.) -@cindex comando del debugger, @code{u} (alias per @code{until}) -@cindex comando del debugger, @code{until} -@cindex @code{until}, comando del debugger -@cindex @code{u}, comando del debugger (alias per @code{until}) +@cindex comando del debugger @subentry @code{u} (alias per @code{until}) +@cindex comando del debugger @subentry @code{until} +@cindex @code{until} (comando del debugger) +@cindex @code{u} (comando del debugger) @subentry (alias per @code{until}) @item @code{until} [[@var{nome-file}@code{:}]@var{n} | @var{funzione}] @itemx @code{u} [[@var{nome-file}@code{:}]@var{n} | @var{funzione}] Senza argomenti, prosegue l'esecuzione finch@'e non viene raggiunta una riga @@ -32776,8 +32922,8 @@ lo @dfn{stack frame} corrente non termina l'esecuzione. I comandi per vedere e modificare variabili all'interno di @command{gawk} sono: @table @asis -@cindex comando del debugger, @code{display} -@cindex @code{display}, comando del debugger +@cindex comando del debugger @subentry @code{display} +@cindex @code{display} (comando del debugger) @item @code{display} [@var{var} | @code{$}@var{n}] Aggiunge la variabile @var{var} (o il campo @code{$@var{n}}) alla lista di visualizzazione. Il valore della variabile o del campo @`e visualizzato ogni @@ -32798,9 +32944,9 @@ raggiunge un contesto dove la variabile con quel nome non esiste pi@`u. Senza argomenti, @code{display} mostra i valori correnti degli elementi della lista. -@cindex comando del debugger, @code{eval} -@cindex @code{eval}, comando del debugger -@cindex valutare espressioni, nel debugger +@cindex comando del debugger @subentry @code{eval} +@cindex @code{eval} (comando del debugger) +@cindex valutare espressioni @subentry nel debugger @item @code{eval "@var{istruzioni awk}"} Valuta @var{istruzioni awk} nel contesto del programma in esecuzione. Si pu@`o fare qualsiasi cosa che un programma @command{awk} farebbe: assegnare @@ -32825,11 +32971,11 @@ definire ``variabili locali'' che esistono nel contesto delle @var{istruzioni awk}, invece di usare variabili o parametri di funzione gi@`a definiti nel programma. -@cindex comando del debugger, @code{p} (alias per @code{print}) -@cindex comando del debugger, @code{print} -@cindex @code{print}, comando del debugger -@cindex @code{p}, comando del debugger (alias per @code{print}) -@cindex stampare variabili, nel debugger +@cindex comando del debugger @subentry @code{p} (alias per @code{print}) +@cindex comando del debugger @subentry @code{print} +@cindex @code{print} (comando del debugger) +@cindex @code{p} (comando del debugger) @subentry (alias per @code{print}) +@cindex stampare @subentry variabili @subentry nel debugger @item @code{print} @var{var1}[@code{,} @var{var2} @dots{}] @itemx @code{p} @var{var1}[@code{,} @var{var2} @dots{}] Stampa i valori di una o pi@`u variabili o campi di @command{gawk}. @@ -32855,8 +33001,8 @@ gawk> @kbd{print @@a} L'esempio stampa gli indici e i corrispondenti valori di tutti gli elementi del vettore @code{a}. -@cindex comando del debugger, @code{printf} -@cindex @code{printf}, comando del debugger +@cindex comando del debugger @subentry @code{printf} +@cindex @code{printf} (comando del debugger) @item @code{printf} @var{formato} [@code{,} @var{arg} @dots{}] Stampa un testo formattato. Il @var{formato} pu@`o includere sequenze di protezione, come @samp{\n} @@ -32864,9 +33010,9 @@ protezione, come @samp{\n} Non viene stampato nessun ritorno a capo che non sia stato specificato esplicitamente. -@cindex comando del debugger, @code{set} -@cindex @code{set}, comando del debugger -@cindex assegnare valori a variabili, nel debugger +@cindex comando del debugger @subentry @code{set} +@cindex @code{set} (comando del debugger) +@cindex assegnamento @subentry di valori a variabili, nel debugger @item @code{set} @var{var}@code{=}@var{valore} Assegna un valore costante (numero o stringa) a una variabile o a un campo di @command{awk}. @@ -32876,11 +33022,11 @@ I valori di stringa devono essere racchiusi tra doppi apici Si possono impostare anche delle variabili speciali di @command{awk}, come @code{FS}, @code{NF}, @code{NR}, e cos@`{@dotless{i}} via. -@cindex comando del debugger, @code{w} (alias per @code{watch}) -@cindex comando del debugger, @code{watch} -@cindex @code{watch}, comando del debugger -@cindex @code{w}, comando del debugger (alias per @code{watch}) -@cindex impostare un punto d'osservazione +@cindex comando del debugger @subentry @code{w} (alias per @code{watch}) +@cindex comando del debugger @subentry @code{watch} +@cindex @code{watch} (comando del debugger) +@cindex @code{w} (comando del debugger) @subentry (alias per @code{watch}) +@cindex impostare @subentry un punto d'osservazione @item @code{watch} @var{var} | @code{$}@var{n} [@code{"@var{espressione}"}] @itemx @code{w} @var{var} | @code{$}@var{n} [@code{"@var{espressione}"}] Aggiunge la variabile @var{var} (o il campo @code{$@var{n}}) alla lista dei @@ -32895,15 +33041,15 @@ ogni volta che viene raggiunto il punto d'osservazione. Se la condizione @`e vera, il debugger interrompe l'esecuzione e rimane in attesa di un comando. Altrimenti, @command{gawk} prosegue nell'esecuzione del programma. -@cindex comando del debugger, @code{undisplay} -@cindex @code{undisplay}, comando del debugger -@cindex interruzione visualizzazioni automatiche, nel debugger +@cindex comando del debugger @subentry @code{undisplay} +@cindex @code{undisplay} (comando del debugger) +@cindex interruzione visualizzazioni automatiche @subentry nel debugger @item @code{undisplay} [@var{n}] Rimuove l'elemento numero @var{n} (o tutti gli elementi, se non vi sono argomenti) dalla lista delle visualizzazioni automatiche. -@cindex comando del debugger, @code{unwatch} -@cindex @code{unwatch}, comando del debugger +@cindex comando del debugger @subentry @code{unwatch} +@cindex @code{unwatch} (comando del debugger) @cindex cancellare punto d'osservazione @item @code{unwatch} [@var{n}] Rimuove l'elemento numero @var{n} (o tutti gli elementi, se non vi sono @@ -32922,16 +33068,16 @@ all'interno della pila per vedere qual era lo stato delle cose nelle funzioni che hanno chiamato quella in cui ci si trova. I comandi per far questo sono: @table @asis -@cindex comando del debugger, @code{bt} (alias per @code{backtrace}) -@cindex comando del debugger, @code{backtrace} -@cindex comando del debugger, @code{where} (alias per @code{backtrace}) -@cindex @code{backtrace}, comando del debugger -@cindex @code{bt}, comando del debugger (alias per @code{backtrace}) -@cindex @code{where}, comando del debugger (alias per @code{backtrace}) -@cindex chiamate, @dfn{stack} (pila) delle, mostrare nel debugger -@cindex @dfn{stack} (pila) delle chiamate, mostrare nel debugger -@cindex pila (@dfn{stack}) delle chiamate, mostrare nel debugger -@cindex tracciatura a ritroso, mostrare nel debugger +@cindex comando del debugger @subentry @code{bt} (alias per @code{backtrace}) +@cindex comando del debugger @subentry @code{backtrace} +@cindex comando del debugger @subentry @code{where} (alias per @code{backtrace}) +@cindex @code{backtrace} (comando del debugger) +@cindex @code{bt} (comando del debugger) @subentry (alias per @code{backtrace}) +@cindex @code{where} (comando del debugger) @subentry (alias per @code{backtrace}) +@cindex descrizione di @subentry @dfn{stack}, pila delle @subentry nel debugger +@cindex @dfn{stack} (pila) delle chiamate @subentry visualizzare nel debugger +@cindex pila (@dfn{stack}) delle chiamate @subentry visualizzare nel debugger +@cindex tracciatura a ritroso @subentry mostrare nel debugger @item @code{backtrace} [@var{contatore}] @itemx @code{bt} [@var{contatore}] @itemx @code{where} [@var{contatore}] @@ -32943,16 +33089,16 @@ ritroso mostra il nome e gli argomenti di ciascuna funzione, il sorgente viene mantenuto per i vecchi utenti di GDB che potrebbero essere abituati a quel comando. -@cindex comando del debugger, @code{down} -@cindex @code{down}, comando del debugger +@cindex comando del debugger @subentry @code{down} +@cindex @code{down} (comando del debugger) @item @code{down} [@var{contatore}] Sposta @var{contatore} (default 1) frame sotto la pila verso il frame pi@`u interno. Poi seleziona e stampa il frame. -@cindex comando del debugger, @code{f} (alias per @code{frame}) -@cindex comando del debugger, @code{frame} -@cindex @code{frame}, comando del debugger -@cindex @code{f}, comando del debugger (alias per @code{frame}) +@cindex comando del debugger @subentry @code{f} (alias per @code{frame}) +@cindex comando del debugger @subentry @code{frame} +@cindex @code{frame} (comando del debugger) +@cindex @code{f} (comando del debugger) @subentry (alias per @code{frame}) @item @code{frame} [@var{n}] @itemx @code{f} [@var{n}] Seleziona e stampa lo @dfn{stack frame} @var{n}. Il frame 0 @`e quello @@ -32962,8 +33108,8 @@ col numero pi@`u alto @`e quello per il programma principale. Le informazioni stampate comprendono il numero di frame, i nomi delle funzioni e degli argomenti, i file sorgenti e le righe sorgenti. -@cindex comando del debugger, @code{up} -@cindex @code{up}, comando del debugger +@cindex comando del debugger @subentry @code{up} +@cindex @code{up} (comando del debugger) @item @code{up} [@var{contatore}] Sposta @var{contatore} (default 1) frame sopra la pila verso il frame pi@`u esterno. Poi seleziona e stampa il frame. @@ -32980,10 +33126,10 @@ quest'informazione, chiamato convenientemente @code{info}. @code{info} sapere: @table @asis -@cindex comando del debugger, @code{i} (alias per @code{info}) -@cindex comando del debugger, @code{info} -@cindex @code{info}, comando del debugger -@cindex @code{i}, comando del debugger (alias per @code{info}) +@cindex comando del debugger @subentry @code{i} (alias per @code{info}) +@cindex comando del debugger @subentry @code{info} +@cindex @code{info} (comando del debugger) +@cindex @code{i} (comando del debugger) @subentry (alias per @code{info}) @item @code{info} @var{cosa} @itemx @code{i} @var{cosa} Il valore di @var{cosa} dovrebbe essere uno dei seguenti: @@ -32991,39 +33137,40 @@ Il valore di @var{cosa} dovrebbe essere uno dei seguenti: @c nested table @table @code @item args -@cindex mostrare argomenti delle funzioni, nel debugger -@cindex debugger, mostrare argomenti delle funzioni +@cindex mostrare nel debugger @subentry argomenti delle funzioni +@cindex debugger @subentry mostrare argomenti delle funzioni Elenca gli argomenti del frame selezionato. @item break -@cindex mostrare punti d'interruzione, nel debugger -@cindex debugger, mostrare punti d'interruzione +@cindex mostrare nel debugger @subentry punti d'interruzione +@cindex debugger @subentry mostrare punti d'interruzione Elenca tutti i punti d'interruzione attualmente impostati. @item display -@cindex visualizzazioni automatiche, nel debugger -@cindex debugger, visualizzazioni automatiche +@cindex visualizzazioni automatiche @subentry nel debugger +@cindex debugger @subentry visualizzazioni automatiche Elenca tutti gli elementi della lista delle visualizzazioni automatiche. @item frame -@cindex descrizione degli @dfn{stack frame} delle chiamate, nel debugger -@cindex debugger, descrizione degli @dfn{stack frame} delle chiamate +@cindex descrizione di @subentry @dfn{stack frame} delle chiamate @subentry nel debugger +@cindex debugger @subentry descrizione degli @dfn{stack frame} delle chiamate D@`a una descrizione degli @dfn{stack frame} selezionati. @item functions -@cindex elencare definizioni delle funzioni, nel debugger -@cindex debugger, elencare definizioni delle funzioni +@cindex elencare @subentry definizioni delle funzioni @subentry nel debugger +@cindex debugger @subentry elencare definizioni delle funzioni Elenca tutte le definizioni delle funzioni compresi i @value{FNS} e i numeri di riga. @item locals -@cindex mostrare variabili locali, nel debugger -@cindex debugger, mostrare variabili locali +@cindex mostrare nel debugger @subentry variabili locali +@cindex debugger @subentry mostrare variabili locali Elenca le variabili locali dei frame selezionati. @item source -@cindex mostrare il nome del file sorgente corrente, nel debugger -@cindex debugger, mostrare il nome del file sorgente corrente +@cindex mostrare nel debugger @subentry nome del file sorgente corrente +@cindex debugger @subentry mostrare il nome del file sorgente corrente +@cindex file @subentry sorgente corrente, mostrare nel debugger Stampa il nome del file sorgente corrente. Ogni volta che il programma si interrompe, il file sorgente corrente @`e il file che contiene l'istruzione corrente. Quando il debugger viene avviato per la prima volta, il file @@ -33032,18 +33179,18 @@ Il comando @samp{list @var{nome-file}:@var{numero-riga}} pu@`o essere usato in qualsiasi momento per cambiare il sorgente corrente. @item sources -@cindex mostrare tutti i file sorgente, nel debugger -@cindex debugger, mostrare tutti i file sorgenti -Elenca tutti i sorgenti del programma. +@cindex mostrare nel debugger @subentry nome di tutti i file sorgente +@cindex debugger @subentry mostrare il nome di tutti i file sorgente +Elenca tutti i file sorgente del programma. @item variables -@cindex elencare tutte le variabili locali, nel debugger -@cindex debugger, elencare tutte le variabili locali +@cindex elencare @subentry tutte le variabili locali @subentry nel debugger +@cindex debugger @subentry elencare tutte le variabili locali Elenca tutte le variabili locali. @item watch -@cindex mostrare i punti d'osservazione, nel debugger -@cindex debugger, mostrare i punti d'osservazione +@cindex mostrare nel debugger @subentry punti d'osservazione +@cindex debugger @subentry mostrare i punti d'osservazione Elenca tutti gli elementi della lista dei punti d'osservazione. @end table @end table @@ -33053,12 +33200,12 @@ salvare lo stato del debugger e la capacit@`a di eseguire comandi del debugger da un file. I comandi sono: @table @asis -@cindex comando del debugger, @code{o} (alias per @code{option}) -@cindex comando del debugger, @code{option} -@cindex @code{option}, comando del debugger -@cindex @code{o}, comando del debugger (alias per @code{option}) +@cindex comando del debugger @subentry @code{o} (alias per @code{option}) +@cindex comando del debugger @subentry @code{option} +@cindex @code{option} (comando del debugger) +@cindex @code{o} (comando del debugger) @subentry (alias per @code{option}) @cindex visualizzare le opzioni del debugger -@cindex debugger, opzioni del +@cindex debugger @subentry opzioni del @item @code{option} [@var{nome}[@code{=}@var{valore}]] @itemx @code{o} [@var{nome}[@code{=}@var{valore}]] Senza argomenti, visualizza le opzioni del debugger disponibili e i loro valori @@ -33071,56 +33218,57 @@ Le opzioni disponibili sono: @c asis for docbook @table @asis @item @code{history_size} -@cindex debugger, dimensione della cronologia +@cindex debugger @subentry dimensione della cronologia Imposta il numero massimo di righe da mantenere nel file della cronologia @file{./.gawk_history}. Il valore di default @`e 100. @item @code{listsize} -@cindex debugger, numero di righe nella lista di default +@cindex debugger @subentry numero di righe nella lista di default Specifica il numero di righe che @code{list} deve stampare. Il valore di default @`e 15. @item @code{outfile} -@cindex ridirezionare l'output di @command{gawk}, nel debugger -@cindex debugger, ridirezionare l'output di @command{gawk} +@cindex ridirezionare l'output di @command{gawk} @subentry nel debugger +@cindex debugger @subentry ridirezionare l'output di @command{gawk} Invia l'output di @command{gawk} in un file; l'output del debugger @`e visualizzato comunque anche nello standard output. Assegnare come valore stringa vuota (@code{""}) reimposta l'output solo allo standard output. @item @code{prompt} -@cindex debugger, prompt +@cindex debugger @subentry prompt +@cindex prompt del debugger Cambia la riga per l'immissione dei comandi del debugger. Il valore di default @`e @samp{@w{gawk> }}. @item @code{save_history} [@code{on} | @code{off}] -@cindex debugger, file della cronologia +@cindex debugger @subentry file della cronologia Salva la cronologia dei comandi nel file @file{./.gawk_history}. L'impostazione di default @`e @code{on}. @item @code{save_options} [@code{on} | @code{off}] -@cindex salvataggio opzioni, nel debugger -@cindex debugger, salvataggio opzioni +@cindex salvataggio opzioni @subentry nel debugger +@cindex debugger @subentry salvataggio opzioni Salva le opzioni correnti nel file @file{./.gawkrc} all'uscita. L'impostazione di default @`e @code{on}. Le opzioni sono lette di nuovo all'avvio della sessione successiva. @item @code{trace} [@code{on} | @code{off}] -@cindex istruzioni, tener traccia delle, nel debugger -@cindex debugger, tener traccia delle istruzioni +@cindex istruzioni @subentry tener traccia delle @subentry nel debugger +@cindex debugger @subentry tener traccia delle istruzioni Attiva o disattiva il tracciamento delle istruzioni. L'impostazione di default @`e @code{off}. @end table -@cindex debugger, salvare dei comandi su un file -@cindex salvare dei comandi su un file, nel debugger +@cindex debugger @subentry salvare dei comandi su un file +@cindex salvare dei comandi su un file @subentry nel debugger @item @code{save} @var{nome-file} Salva i comandi eseguiti nella sessione corrente nel @value{FN} indicato, in modo da poterli ripetere in seguito usando il comando @command{source}. @item @code{source} @var{nome-file} -@cindex debugger, leggere comandi da un file -@cindex leggere comandi da un file, nel debugger +@cindex debugger @subentry leggere comandi da un file +@cindex leggere @subentry comandi da un file nel debugger Esegue comandi contenuti in un file; un errore in un comando non impedisce l'esecuzione dei comandi successivi. In un file di comandi sono consentiti i commenti (righe che iniziano con @samp{#}). @@ -33144,8 +33292,8 @@ Ci sono alcuni altri comandi che non rientrano nelle precedenti categorie, come i seguenti: @table @asis -@cindex comando del debugger, @code{dump} -@cindex @code{dump}, comando del debugger +@cindex comando del debugger @subentry @code{dump} +@cindex @code{dump} (comando del debugger) @item @code{dump} [@var{nome-file}] Riversa il @dfn{byte code} del programma nello standard output o nel file definito in @var{nome-file}. Questo stampa una rappresentazione delle @@ -33208,28 +33356,28 @@ gawk> @end group @end smallexample -@cindex comando del debugger, @code{exit} -@cindex @code{exit}, comando del debugger +@cindex comando del debugger @subentry @code{exit} +@cindex @code{exit} (comando del debugger) @cindex uscire dal debugger -@cindex debugger, uscire dal +@cindex debugger @subentry uscire dal @item @code{exit} Esce dal debugger. Si veda la voce @samp{quit}, pi@`u avanti in quest'elenco. -@cindex comando del debugger, @code{h} (alias per @code{help}) -@cindex comando del debugger, @code{help} -@cindex @code{help}, comando del debugger -@cindex @code{h}, comando del debugger (alias per @code{help}) +@cindex comando del debugger @subentry @code{h} (alias per @code{help}) +@cindex comando del debugger @subentry @code{help} +@cindex @code{help} (comando del debugger) +@cindex @code{h} (comando del debugger) @subentry (alias per @code{help}) @item @code{help} @itemx @code{h} Stampa una lista di tutti i comandi del debugger di @command{gawk} con un breve sommario su come usarli. @samp{help @var{comando}} stampa l'informazione sul comando @var{comando}. -@cindex comando del debugger, @code{l} (alias per @code{list}) -@cindex comando del debugger, @code{list} -@cindex @code{list}, comando del debugger -@cindex @code{l}, comando del debugger (alias per @code{list}) +@cindex comando del debugger @subentry @code{l} (alias per @code{list}) +@cindex comando del debugger @subentry @code{list} +@cindex @code{list} (comando del debugger) +@cindex @code{l} (comando del debugger) @subentry (alias per @code{list}) @item @code{list} [@code{-} | @code{+} | @var{n} | @var{nome-file}@code{:}@var{n} | @var{n}--@var{m} | @var{funzione}] @itemx @code{l} [@code{-} | @code{+} | @var{n} | @var{nome-file}@code{:}@var{n} | @var{n}--@var{m} | @var{funzione}] Stampa le righe specificate (per default 15) dal file sorgente corrente @@ -33260,12 +33408,12 @@ Stampa righe centrate attorno all'inizio della funzione @var{function}. Questo comando pu@`o cambiare il file sorgente corrente. @end table -@cindex comando del debugger, @code{q} (alias per @code{quit}) -@cindex comando del debugger, @code{quit} -@cindex @code{quit}, comando del debugger -@cindex @code{q}, comando del debugger (alias per @code{quit}) +@cindex comando del debugger @subentry @code{q} (alias per @code{quit}) +@cindex comando del debugger @subentry @code{quit} +@cindex @code{quit} (comando del debugger) +@cindex @code{q} (comando del debugger) @subentry (alias per @code{quit}) @cindex uscire dal debugger -@cindex debugger, uscire dal +@cindex debugger @subentry uscire dal @item @code{quit} @itemx @code{q} Esce dal debugger. Fare il debug @`e divertente, ma noi tutti a volte @@ -33275,8 +33423,8 @@ prima, se si sta eseguendo un programma, il debugger avverte quando si batte @samp{q} o @samp{quit}, in modo da essere sicuri di voler realmente abbandonare il debug. -@cindex comando del debugger, @code{trace} -@cindex @code{trace}, comando del debugger +@cindex comando del debugger @subentry @code{trace} +@cindex @code{trace} (comando del debugger) @item @code{trace} [@code{on} | @code{off}] Abilita o disabilita la stampa continua delle istruzioni che si stanno per eseguire, assieme alle righe di @command{awk} che implementano. @@ -33291,10 +33439,10 @@ familiari. @node Supporto per Readline @section Supporto per Readline -@cindex completamento dei comandi, nel debugger -@cindex debugger, completamento dei comandi nel -@cindex espansione della cronologia, nel debugger -@cindex debugger, espansione della cronologia +@cindex completamento dei comandi @subentry nel debugger +@cindex debugger @subentry completamento dei comandi nel +@cindex espansione della cronologia @subentry nel debugger +@cindex debugger @subentry espansione della cronologia Se @command{gawk} @`e compilato con @uref{http://cnswww.cns.cwru.edu/php/chet/readline/readline.html, la libreria @@ -33334,8 +33482,8 @@ e @node Limitazioni @section Limitazioni -@cindex debugger, limitazioni -@cindex limitazioni del debugger +@cindex debugger @subentry limitazioni +@cindex limitazioni @subentry del debugger Si spera che il lettore trovi il debugger di @command{gawk} utile e piacevole da usare, ma come accade per ogni programma, specialmente nelle sue prime versioni, ha ancora delle limitazioni. Quelle di cui @`e bene essere al corrente sono: @@ -33557,10 +33705,10 @@ Chi ne trovasse, @`e pregato di notificarlo (@xref{Bug}). @node Spazio-dei-nomi globale @section Lo spazio-dei-nomi globale in @command{awk} standard -@cindex spazio-dei-nomi, definizione -@cindex spazio-dei-nomi, globale, in @command{awk} standard +@cindex spazio-dei-nomi @subentry definizione +@cindex spazio-dei-nomi @subentry globale @subentry in @command{awk} standard In @command{awk} standard, esiste un unico @dfn{spazio-dei-nomi} globale. -Ci@`o significa che @emph{tutti} i nomi di funzione e i nomi di variabili +Ci@`o significa che @emph{tutti} i nomi di funzione e i nomi di variabili globali devono essere unici. Per esempio, due differenti file sorgenti di @command{awk}, se usati insieme, @@ -33577,8 +33725,8 @@ incidentalmente entrare in conflitto con le variabili globali ``private'' proprie di un'altra libreria (@pxref{Nomi di variabili di libreria}). -@cindex pacchetto, definizione di -@cindex modulo, definizione di +@cindex pacchetto @subentry definizione di +@cindex modulo @subentry definizione di Molti altri linguaggi di programmazione risolvono questo problema rendendo disponibile qualche tipo di controllo sullo spazio-dei-nomi: un modo per poter stabilire che ``questa funzione @`e nello spazio-dei-nomi @var{xxx}, @@ -33597,12 +33745,13 @@ spazi-dei-nomi separati fra loro. @node Nomi qualificati @section Nomi qualificati -@cindex nome qualificato, definizione di -@cindex qualificato, nome, definizione di -@cindex spazio-dei-nomi, nomi qualificati -@cindex @code{::}, spazio-dei-nomi, separatore -@cindex nome del componente -@cindex componente, nome del +@cindex nomi @subentry qualificati (in uno spazio-dei-nomi) @subentry definizione di +@cindex qualificato @subentry nome @subentry definizione di +@cindex spazio-dei-nomi @subentry nomi qualificati +@cindex @code{:} (due punti) @subentry @code{::} @subentry separatore spazio-dei-nomi +@cindex due punti (@code{:}) @subentry @code{::} (separatore spazio-dei-nomi) +@cindex nomi @subentry di componente (in uno spazio-dei-nomi) +@cindex componente @subentry spazio-dei-nomi @subentry nome del Un @dfn{nome qualificato} @`e un identificativo composto dal nome di uno spazio-dei-nomi, da un separatore di spazio-dei-nomi (i due caratteri @code{::}), e dal nome di un @dfn{componente}. @@ -33619,7 +33768,7 @@ operatore. Non @`e consentito inserire degli spazi di separazione fra il nome dello spazio-dei-nomi, la notazione @code{::}, e il nome del componente. @end quotation -@cindex nome qualificato, uso del +@cindex nomi @subentry qualificati (in uno spazio-dei-nomi) @`E necessario usare nomi qualificati, in uno spazio-dei-nomi, per accedere a variabili e funzioni in un altro spazio-dei-nomi. Ci@`o @`e particolarmente importante quando si usano nomi di variabile come indici del vettore @@ -33630,15 +33779,15 @@ e quando si effettuano chiamate di funzione indirette @node Spazio-dei-nomi di default @section Lo spazio-dei-nomi di default -@cindex spazio-dei-nomi, default -@cindex spazio-dei-nomi, @code{awk} -@cindex @code{awk}, spazio-dei-nomi +@cindex spazio-dei-nomi @subentry default +@cindex spazio-dei-nomi @subentry @code{awk} +@cindex @code{awk} @subentry spazio-dei-nomi Lo spazio-dei-nomi di default, ovviamente, @`e @code{awk}. Tutte le variabili predefinite di @command{awk} e di @command{gawk} sono in questo spazio-dei-nomi, e quindi hanno nomi qualificati come @code{awk::ARGC}, @code{awk::NF}, e cos@`{@dotless{i}} via. -@cindex nomi in maiuscolo, spazio-dei-nomi dei +@cindex nomi @subentry scritti in maiuscolo @subentry sempre nello spazio-dei-nomi @code{awk} Inoltre, anche se si sta utilizzando uno spazio-dei-nomi differente nel file sorgente correntemente in uso (@pxref{Cambiare lo spazio-dei-nomi}), @command{gawk} @@ -33651,9 +33800,12 @@ Ci@`o rende anche pi@`u scorrevole il codice stesso. @node Cambiare lo spazio-dei-nomi @section Come cambiare lo spazio-dei-nomi -@cindex spazio-dei-nomi, cambiare lo -@cindex @code{@@namespace}, direttiva -@cindex direttiva @code{@@namespace} +@cindex spazio-dei-nomi @subentry cambiare lo +@cindex cambiare @subentry lo spazio-dei-nomi +@cindex @code{@@} (chiocciola) @subentry @code{@@namespace} (direttiva) +@cindex chiocciola (@code{@@}) @subentry @code{@@namespace} (direttiva) +@cindex direttiva @subentry @code{@@namespace} +@cindex @code{@@} (chiocciola) @subentry @code{@@namespace} (direttiva) Per impostare lo spazio-dei-nomi corrente, si usi una direttiva @code{@@namespace} al livello principale del programma interessato: @@ -33682,8 +33834,8 @@ dell'esecuzione del programma. Ci@`o va compreso e messo in conto in anticipo. @end quotation -@cindex spazio-dei-nomi, implicito -@cindex implicito, spazio-dei-nomi +@cindex spazio-dei-nomi @subentry implicito +@cindex implicito @subentry spazio-dei-nomi Ogni file sorgente designato dalle opzioni @option{-i} e @option{-f} inizia con una direttiva implicita @samp{@@namespace "awk"}. Analogamente, ogni parte di codice @@ -33691,8 +33843,10 @@ immesso nella riga di comando, usando l'opzione @option{-e} ha la stessa implicita direttiva iniziale (@pxref{Opzioni}). -@cindex spazio-dei-nomi corrente, cambiare e ripristinare -@cindex corrente, spazio-dei-nomi, cambiare e ripristinare +@cindex spazio-dei-nomi @subentry corrente @subentry cambiare e ripristinare +@cindex cambiare @subentry lo spazio-dei-nomi corrente +@cindex ripristinare @subentry spazio-dei-nomi corrente +@cindex corrente @subentry spazio-dei-nomi @subentry cambiare e ripristinare I file inclusi con la direttiva @code{@@include} (@pxref{Includere file}) ``cambiano'' (@dfn{push}) e ``ripristinano'' (@dfn{pop}) lo spazio-dei-nomi corrente. Ossia, ogni @code{@@include} salva @@ -33703,20 +33857,25 @@ Quando @command{gawk} termina di elaborare il file incluso, lo spazio-dei-nomi salvato @`e ripristinato e l'elaborazione prosegue da dove era stata sospesa nel file originale. -@cindex @code{@@namespace}, non riguarda @code{BEGIN}@comma{} @code{BEGINFILE}, @code{END}, ed @code{ENDFILE} -@cindex @code{BEGIN}, regola, ordine di esecuzione non alterato da @code{@@namespace} -@cindex @code{BEGINFILE}, regola, ordine di esecuzione non alterato da @code{@@namespace} -@cindex @code{END}, regola, ordine di esecuzione non alterato da @code{@@namespace} -@cindex @code{ENDFILE}, regola, ordine di esecuzione non alterato da @code{@@namespace} +@cindex @code{@@} (chiocciola) @subentry @code{@@namespace} (direttiva) @subentry non riguarda @code{BEGIN}, @code{BEGINFILE}, @code{END}, ed @code{ENDFILE} +@cindex chiocciola (@code{@@}) @subentry @code{@@namespace} (direttiva) @subentry non riguarda @code{BEGIN}, @code{BEGINFILE}, @code{END}, ed @code{ENDFILE} +@cindex @code{BEGIN} (regola) @subentry ordine di esecuzione non alterato da @code{@@namespace} +@cindex @code{BEGINFILE} (regola) @subentry ordine di esecuzione non alterato da @code{@@namespace} +@cindex @code{END} (regola) @subentry ordine di esecuzione non alterato da @code{@@namespace} +@cindex @code{ENDFILE} (regola) @subentry ordine di esecuzione non alterato da @code{@@namespace} +@cindex @code{@@} (chiocciola) @subentry @code{@@namespace} (direttiva) +@cindex chiocciola (@code{@@}) @subentry @code{@@namespace} (direttiva) L'uso di @code{@@namespace} non ha influenza sull'ordine di esecuzione delle regole @code{BEGIN}, @code{BEGINFILE}, @code{END}, e @code{ENDFILE}. @node Regole per i nomi @section Regole per assegnare nomi a uno spazio-dei-nomi e ai suoi componenti -@cindex nomi, regole per assegnare, agli spazi-dei-nomi e ai loro componenti -@cindex spazio-dei-nomi, nomi, regole per assegnare -@cindex componenti di uno spazio-dei-nomi, regole per assegnare i nomi +@cindex nomi @subentry regole per assegnarli @subentry agli spazi-dei-nomi e ai loro componenti +@cindex spazio-dei-nomi @subentry regole per assegnare i nomi +@c not "component names" to merge with other index entry +@cindex spazio-dei-nomi @subentry componenti @subentry regole per assegnare i nomi +@cindex componente @subentry spazio-dei-nomi @subentry regole per assegnare i nomi Alcune regole vanno seguite nell'attribuire i nomi a uno spazio-dei-nomi e alle sue componenti. @@ -33791,9 +33950,9 @@ nomi molto utile. @node Gestione interna dei nomi @section Come i nomi sono gestiti internamente -@cindex nomi, gestione dei -@cindex @code{awk} spazio-dei-nomi, memoria che contiene i nomi identificativi -@cindex @code{awk} spazio-dei-nomi, utilizzo per chiamate indirette di funzione +@cindex nomi @subentry gestione (in uno spazio-dei-nomi) +@cindex @code{awk} @subentry spazio-dei-nomi @subentry memoria che contiene i nomi identificativi +@cindex @code{awk} @subentry spazio-dei-nomi @subentry utilizzo per chiamate indirette di funzione Per compatibilit@`a all'indietro, tutti gli identificatvi nello spazio-dei-nomi @code{awk} sono memorizzati internamente come identificativi senza qualifica (ossia, senza il prefisso @samp{awk::}). Ci@`o ha importanza principalmente @@ -33826,7 +33985,7 @@ function calcola() @ii{Il nome vero di questa funzione @`e} rapporto::com @node Esempio di spazio-dei-nomi @section Esempio di codice che usa uno spazio-dei-nomi -@cindex spazio-dei-nomi, esempio di codice +@cindex spazio-dei-nomi @subentry esempio di codice L'esempio seguente @`e una versione riveduta dell'insieme di script sviluppati in @ref{Funzioni Passwd}; l@`{@dotless{i}} si pu@`o trovare la descrizione del funzionamento del codice. @@ -33961,10 +34120,10 @@ Questo @value{SECTION} tratta brevemente di come la funzionalit@`a spazio-dei-nomi interagisce con altre importanti funzionalit@`a di @command{gawk}. -@cindex spazio-dei-nomi, interazione con la profilazione -@cindex spazio-dei-nomi, interazione con la stampa elegante -@cindex profilazione, interazione con spazio-dei-nomi -@cindex stampa elegante, interazione con spazio-dei-nomi +@cindex spazio-dei-nomi @subentry interazione con la profilazione +@cindex spazio-dei-nomi @subentry interazione con la stampa elegante +@cindex profilazione @subentry interazione con spazio-dei-nomi +@cindex stampa elegante @subentry interazione con spazio-dei-nomi La profilazione e la stampa elegante (@pxref{Profilare}) sono state migliorate per trattare gli spazi-dei-nomi e le regole per assegnare nomi in uno spazio-dei-nomi @ref{Regole per i nomi}. @@ -33975,17 +34134,17 @@ In questo modo i nomi dei componenti sono degli identificativi semplici, senza dover usare dappertutto degli identificativi qualificati. -@cindex spazio-dei-nomi, interazioen con il debugger -@cindex debugger, interazione con lo spazio-dei-nomi +@cindex spazio-dei-nomi @subentry interazione con il debugger +@cindex debugger @subentry interazione con lo spazio-dei-nomi L'interazione con il debugger (@pxref{Debugging}) non @`e cambiata (almeno fino al momento in cui questo libro @`e stato scritto). Alcuni campi interni sono stati modificati per tener conto degli spazi-dei-nomi, e il comando @code{dump} del debugger @`e stato modificato per lo stesso motivo. -@cindex spazio-dei-nomi, interazione con l'estensione API -@cindex estensione API, interazione con lo spazio-dei-nomi -@cindex API, estensione, interazione con lo spazio-dei-nomi +@cindex spazio-dei-nomi @subentry interazione con l'estensione API +@cindex estensione API @subentry interazione con lo spazio-dei-nomi +@cindex API (estensione) @subentry interazione con lo spazio-dei-nomi L'estensione API (@pxref{Estensioni dinamiche}) ha sempre previsto di avere funzioni in uno spazio-dei-nomi differente, sebbene ci@`o non fosse stato ancora implementato. Tuttavia, le routine di @@ -34030,7 +34189,7 @@ Questo vale soprattutto per la profilazione / stampa elegante (@pxref{Profilare}) e per le funzionalit@`a relative alle estensioni (@pxref{Estensioni dinamiche}). -@cindex spazio-dei-nomi, compatibilit@`a all'indietro +@cindex spazio-dei-nomi @subentry compatibilit@`a all'indietro @item Complessivamente, la funzionalit@`a spazio-dei-nomi @`e stata progettata e implementata avendo come preoccupazione quella di mantenere la compatibilit@`a @@ -34041,10 +34200,10 @@ su una versione di @command{gawk} che abbia la funzionalit@`a spazio-dei-nomi. @node Calcolo con precisione arbitraria @chapter Calcolo con precisione arbitraria con @command{gawk} -@cindex precisione arbitraria -@cindex precisione multipla -@cindex precisione infinita -@cindex virgola mobile, numeri in@comma{} precisione arbitraria +@cindex precisione @subentry arbitraria +@cindex precisione @subentry multipla +@cindex precisione @subentry infinita +@cindex virgola mobile @subentry numeri in @subentry precisione arbitraria In questo @value{CHAPTER} si introducono alcuni concetti base su come i computer @@ -34121,9 +34280,10 @@ parte frazionaria, come 1, 42, o @minus{}17. Il vantaggio dei numeri interi @`e che essi rappresentano dei valori in maniera esatta. Lo svantaggio @`e che i numeri rappresentabili sono limitati. -@cindex senza segno, interi -@cindex segno, interi senza -@cindex interi senza segno +@cindex senza segno @subentry interi +@cindex segno @subentry interi senza +@cindex interi @subentry senza segno +@cindex numeri @subentry interi @subentry senza segno Nei calcolatori, i valori interi sono di due tipi: @dfn{con segno} e @dfn{senza segno}. I valori con segno possono essere negativi o positivi, mentre i valori senza segno sono sempre maggiori o uguali a zero. @@ -34132,8 +34292,8 @@ Nei sistemi informatici, il calcolo con valori interi @`e esatto, ma il possibil campo di variazione dei valori @`e limitato. L'elaborazione con numeri interi @`e pi@`u veloce di quella con numeri in virgola mobile. -@cindex virgola mobile, numeri in -@cindex numeri in virgola mobile +@cindex virgola mobile @subentry numeri in +@cindex numeri @subentry in virgola mobile @item La matematica coi numeri in virgola mobile I numeri in virgola mobile rappresentano quelli che a scuola sono chiamati numeri ``reali'' (cio@`e, quelli che hanno una parte frazionaria, come @@ -34147,15 +34307,15 @@ nell'hardware dell'elaboratore, entro un intervallo di valori limitato. Ci sono inoltre librerie di programmi che consentono calcoli, usando numeri in virgola mobile, di precisione arbitraria. -@cindex virgola mobile, numeri in@comma{} precisione singola -@cindex virgola mobile, numeri in@comma{} precisione doppia -@cindex virgola mobile, numeri in@comma{} precisione arbitraria -@cindex precisione singola -@cindex precisione doppia -@cindex precisione arbitraria -@cindex singola, precisione -@cindex doppia, precisione -@cindex arbitraria, precisione +@cindex virgola mobile @subentry numeri in @subentry precisione singola +@cindex virgola mobile @subentry numeri in @subentry precisione doppia +@cindex virgola mobile @subentry numeri in @subentry precisione arbitraria +@cindex precisione @subentry singola +@cindex precisione @subentry doppia +@cindex precisione @subentry arbitraria +@cindex singola @subentry precisione +@cindex doppia precisione +@cindex arbitraria @subentry precisione POSIX @command{awk} usa numeri in virgola mobile a @dfn{doppia precisione}, che possono gestire pi@`u cifre rispetto ai numeri in virgola mobile a @dfn{singola precisione}. @command{gawk} ha inoltre funzionalit@`a, descritte @@ -34730,8 +34890,8 @@ $ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 1/10) @}'} @node Impostare modo di arrotondare @subsection Impostare la modalit@`a di arrotondamento -@cindex @code{ROUNDMODE}, variable -@cindex variabile @code{ROUNDMODE} +@cindex @code{ROUNDMODE} (variabile) +@cindex variabile @subentry @code{ROUNDMODE} La variabile @code{ROUNDMODE} permette di controllare a livello di programma la modalit@`a di arrotondamento. La corrispondenza tra @code{ROUNDMODE} e le modalit@`a di arrotondamento IEEE @@ -34859,9 +35019,9 @@ cambiando la modalit@`a di arrotondamento. @node Interi a precisione arbitraria @section Aritmetica dei numeri interi a precisione arbitraria con @command{gawk} -@cindex numeri interi a precisione arbitraria -@cindex interi a precisione arbitraria -@cindex precisione arbitraria, interi a +@cindex numeri @subentry interi @subentry a precisione arbitraria +@cindex interi @subentry a precisione arbitraria +@cindex precisione @subentry arbitraria @subentry interi a Quando viene specificata l'opzione @option{-M}, @command{gawk} esegue tutti i calcoli sui numeri interi usando gli interi a @@ -34918,7 +35078,7 @@ Il risultato di un'operazione aritmetica tra un intero e un valore in virgola mobile @`e un valore in virgola mobile con precisione uguale alla precisione di lavoro. Il seguente programma calcola l'ottavo termine nella successione di Sylvester@footnote{Weisstein, Eric W. -@cite{Sylvester's Sequence}. From MathWorld---A Wolfram Web Resource +@cite{Sylvester's Sequence}. From MathWorld --- A Wolfram Web Resource @w{(@url{http://mathworld.wolfram.com/SylvestersSequence.html}).}} usando una ricorrenza: @@ -35102,8 +35262,8 @@ Si veda @node Controllare disponibilit@`a MPFR @section Come controllare se MPFR @`e disponibile -@cindex MPFR, controllare se disponibile -@cindex controllare disponibilit@`a MPFR +@cindex MPFR @subentry controllare disponibilit@`a +@cindex controllo @subentry disponibilit@`a MPFR Occasionalmente, potrebbe essere utile controllare se @command{gawk} sia stato chiamato specificando l'opzione @option{-M}, che consente di effettuare calcoli aritmetici di precisione arbitraria. @@ -35266,6 +35426,7 @@ $ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'} speciali. Cos@`{@dotless{i}}, @samp{+nan} e @samp{+NaN} sono la stessa cosa. @end itemize +@cindex POSIX @subentry modalit@`a Oltre a gestire l'input, @command{gawk} deve anche stampare valori ``corretti'' in output, quando un valore sia NaN o infinito. A partire dalla @value{PVERSION} 4.2.2, per tali valori @@ -35352,8 +35513,8 @@ necessaria. @node Estensioni dinamiche @chapter Scrivere estensioni per @command{gawk} -@cindex estensioni caricate dinamicamente -@cindex dinamiche, estensioni +@cindex estensioni @subentry caricare @subentry dinamicamente +@cindex dinamiche @subentry estensioni @`E possibile aggiungere nuove funzioni, scritte in C o C++, a @command{gawk} usando librerie caricate dinamicamente. Questa funzionalit@`a @`e disponibile @@ -35587,8 +35748,8 @@ funzionalit@`a utilizzate nell'estensione. (Discrepanze tra le versioni @node Descrizione dell'estensione API @section Una descrizione completa dell'API -@cindex estensione, API -@cindex API, estensione +@cindex estensione API +@cindex API (estensione) Il codice sorgente scritto in C o C++ per un'estensione deve includere il file di intestazione @@ -35831,7 +35992,7 @@ Questo @node Tipi di dati generali @subsection I tipi di dati di impiego generale -@cindex Robbins, Arnold +@cindex Robbins @subentry Arnold @cindex Ramey, Chet @quotation @i{Ho un vero rapporto di amore/odio con le @dfn{unioni}.} @@ -36093,8 +36254,8 @@ di @command{gawk} e riduce il tempo richiesto per creare il valore. @node Funzioni di allocazione memoria @subsection Funzioni per allocare memoria e macro di servizio @cindex allocare memoria per estensioni -@cindex estensioni, allocare memoria per -@cindex memoria, allocare per estensioni +@cindex estensioni @subentry allocare memoria per +@cindex memoria @subentry allocare per estensioni L'API fornisce alcune funzioni per effettuare @dfn{allocazioni di memoria} che possono essere passate a @command{gawk}, e anche un certo numero di @@ -36311,7 +36472,7 @@ dati ottenuti in precedenza tramite una chiamata a @node Funzioni di registrazione @subsection Funzioni di registrazione @cindex registrazione di estensione -@cindex estensione, registrazione di +@cindex estensioni @subentry registrazione di Questa @value{SECTION} descrive le funzioni dell'API per registrare parti di un'estensione con @command{gawk}. @@ -36515,9 +36676,9 @@ registrate, quando viene invocato specificando l'opzione @option{--version}. @node Analizzatori di input @subsubsection Analizzatori di input personalizzati -@cindex personalizzato, analizzatore di input +@cindex personalizzato @subentry analizzatore di input @cindex analizzatore di input personalizzato -@cindex input, analizzatore di, personalizzato +@cindex input @subentry analizzatore di @subentry personalizzato Per default, @command{gawk} legge file di testo come input. Il valore della variabile @code{RS} @`e usato per determinare la fine di un record, e subito @@ -36857,12 +37018,12 @@ Per un esempio si pu@`o vedere l'estensione di esempio @code{readdir_test}. @node Processori di output @subsubsection Registrare un processore di output -@cindex personalizzato, processore di output -@cindex processore di output personalizzato -@cindex output, processore di, personalizzato +@cindex personalizzato @subentry processore di output +@cindex processore di output @subentry personalizzato +@cindex output @subentry processore di @subentry personalizzato @cindex processore di output -@cindex output, processore di +@cindex output @subentry processore di Un @dfn{processore di output} @`e l'immagine riflessa di un analizzatore di input. Consente a un'estensione di prendere il controllo dell'output @@ -36986,9 +37147,9 @@ Registra il processore di output puntato da @code{output_wrapper} con @node Processori bidirezionali @subsubsection Registrare un processore bidirezionale -@cindex personalizzato, processore bidirezionale +@cindex personalizzato @subentry processore bidirezionale @cindex processore bidirezionale personalizzato -@cindex bidirezionale, processore personalizzato +@cindex bidirezionale @subentry processore personalizzato Un @dfn{processore bidirezionale} combina un analizzatore di input e un processore di output per un I/O @@ -37049,9 +37210,9 @@ Registra il processore bidirezionale puntato da @code{two_way_processor} con @node Stampare messaggi @subsection Stampare messaggi dalle estensioni -@cindex stampare messaggi dalle estensioni -@cindex messaggi, stampare dalle estensioni -@cindex estensioni, stampare messaggi dalle +@cindex stampare @subentry messaggi dalle estensioni +@cindex messaggi @subentry stampare dalle estensioni +@cindex estensioni @subentry stampare messaggi dalle @`E possibile stampare diversi tipi di messaggi di avvertimento da un'estensione, come qui spiegato. Si noti che, per queste funzioni, @@ -37335,8 +37496,8 @@ per ulteriori informazioni riguardo alla creazione di vettori. @node Accedere alla tabella simboli @subsection Accedere alla Tabella dei simboli @cindex accedere alle variabili globali dalle estensioni -@cindex variabili globali, accesso dalle estensioni -@cindex estensioni, accesso alle variabili globali +@cindex variabili @subentry globali @subentry accesso dalle estensioni +@cindex estensioni @subentry accesso alle variabili globali Due insiemi di routine permettono di accedere alle variabili globali, e un insieme consente di creare e rilasciare dei valori nascosti. @@ -37661,8 +37822,8 @@ la funzione @code{release_value()}. @node Manipolazione di vettori @subsection Manipolazione di vettori -@cindex vettori, manipolazione nelle estensioni -@cindex estensioni, manipolazione di vettori nelle +@cindex vettori @subentry manipolazione nelle estensioni +@cindex estensioni @subentry manipolazione di vettori nelle La struttura di dati primaria@footnote{D'accordo, l'unica struttura di dati.} in @command{awk} @`e il vettore associativo @@ -38383,9 +38544,9 @@ insieme contiene informazioni su come @command{gawk} @`e stato invocato. @node Versione dell'estensione @subsubsection Costanti e variabili della versione dell'API -@cindex API, versione dell'estensione -@cindex versione dell'estensione API @command{gawk} -@cindex estensione @command{gawk}, versione API +@cindex API @subentry versione dell'estensione +@cindex versione @subentry dell'estensione API @command{gawk} +@cindex estensione API @subentry @command{gawk}, versione API L'API fornisce sia un numero di versione ``principale'' che uno ``secondario''. Le versioni dell'API sono disponibili al momento della compilazione, come @@ -38503,9 +38664,9 @@ chiama @code{check_mpfr_version()}. @node Variabili informative di estens. API @subsubsection Variabili informative -@cindex API, variabili informative dell'estensione -@cindex variabili informative dell'API -@cindex estensione API, variabili informative +@cindex API @subentry variabili informative dell'estensione +@cindex variabili @subentry informative dell'API +@cindex estensione API @subentry variabili informative L'API fornisce accesso a parecchie variabili che descrivono se le opzioni della riga di comando corrispondenti sono state specificate @@ -38725,10 +38886,10 @@ C'@`e una nuova API, @code{get_file()} @node Trovare le estensioni @section Come @command{gawk} trova le estensioni compilate -@cindex estensioni, percorso di ricerca per -@cindex estensioni, come trovarle -@cindex trovare le estensioni -@cindex percorso di ricerca per estensioni +@cindex estensioni @subentry percorso di ricerca per +@cindex estensioni @subentry come trovarle +@cindex trovare @subentry estensioni +@cindex percorso di ricerca @subentry per estensioni Le estensioni compilate vanno installate in una directory dove @command{gawk} possa trovarle. Se @command{gawk} @`e configurato e @@ -38740,8 +38901,8 @@ ricerca di estensioni compilate. @node Esempio di estensione @section Esempio: alcune funzioni per i file -@cindex estensione, esempio -@cindex esempio di estensione +@cindex estensione @subentry esempio +@cindex esempio @subentry di estensione @quotation @i{In qualunque posto vai, l@`a tu sei.} @@ -38978,8 +39139,8 @@ static const char *ext_version = "filefuncs extension: version 1.0"; int plugin_is_GPL_compatible; @end example -@cindex programmazione, convenzioni di, estensioni @command{gawk} -@cindex estensioni @command{gawk}, convenzioni di programmazione +@cindex programmazione @subentry convenzioni di @subentry estensioni @command{gawk} +@cindex estensioni @subentry @command{gawk}, convenzioni di programmazione Per convenzione, per una funzione @command{awk} di nome @code{pippo()}, la funzione C che la implementa @`e chiamata @code{do_pippo()}. La funzione dovrebbe avere due argomenti. Il primo @`e un numero @code{int}, chiamato @@ -39338,9 +39499,9 @@ Abbiamo finito! @node Usare operazioni interne file @subsection Integrare le estensioni -@cindex @command{gawk}, aggiungere funzionalit@`a a -@cindex funzionalit@`a, aggiungere a @command{gawk} -@cindex aggiungere funzionalit@`a a @command{gawk} +@cindex @command{gawk} @subentry aggiungere funzionalit@`a a +@cindex funzionalit@`a @subentry aggiungere a @command{gawk} +@cindex aggiungere @subentry funzionalit@`a a @command{gawk} Dopo aver scritto il codice, dev'essere possibile aggiungerlo in fase di esecuzione all'interprete @command{gawk}. Per prima cosa, il codice va compilato. Supponendo che le funzioni siano in @@ -39425,7 +39586,7 @@ $ @kbd{AWKLIBPATH=$PWD gawk -f testff.awk} @node Esempi di estensione @section Le estensioni di esempio incluse nella distribuzione @command{gawk} -@cindex estensioni distribuite con @command{gawk} +@cindex estensioni @subentry distribuite con @command{gawk} Questa @value{SECTION} fornisce una breve panoramica degli esempi di estensione inclusi nella distribuzione di @command{gawk}. Alcune di esse @@ -39465,16 +39626,16 @@ L'uso @`e il seguente: @item @code{@@load "filefuncs"} Questo @`e il modo per caricare l'estensione. -@cindex @code{chdir()}, estensione -@cindex estensione @code{chdir()} +@cindex @code{chdir()} (estensione) +@cindex estensione @subentry @code{chdir()} @item @code{risultato = chdir("/qualche/directory")} La funzione @code{chdir()} invoca a sua volta la chiamata di sistema @code{chdir()} per cambiare la directory corrente. Restituisce zero se tutto va bene o un valore minore di zero in caso di errore. In quest'ultimo caso, viene aggiornata la variabile @code{ERRNO}. -@cindex @code{stat()}, estensione -@cindex estensione @code{stat()} +@cindex @code{stat()} (estensione) +@cindex estensione @subentry @code{stat()} @item @code{risultato = stat("/qualche/percorso", statdata} [@code{, follow}]@code{)} La funzione @code{stat()} invoca a sua volta la chiamata di sistema @code{stat()}. @@ -39512,7 +39673,7 @@ come quello stampato dal comando @command{ls} (per esempio, @code{"-rwxr-xr-x"}) @tab Tutti @item @code{"linkval"} @tab Il valore del collegamento simbolico @tab Collegamenti simbolici -@item @code{"type"} @tab Il tipo del file in formato stringa---pu@`o essere +@item @code{"type"} @tab Il tipo del file in formato stringa --- pu@`o essere @code{"file"}, @code{"blockdev"}, @code{"chardev"}, @@ -39526,8 +39687,8 @@ o (non tutti i sistemi supportano tutti i tipi file) @tab Tutti @end multitable -@cindex @code{fts()}, estensione -@cindex estensione @code{fts()} +@cindex @code{fts()} (estensione) +@cindex estensione @subentry @code{fts()} @item @code{flags = or(FTS_PHYSICAL, ...)} @itemx @code{risultato = fts(pathlist, flags, filedata)} Percorre gli alberi di file elencati in @code{pathlist} e riempie il vettore @@ -39681,8 +39842,8 @@ libreria C @code{fnmatch()}. Si usa cos@`{@dotless{i}}: @item @@load "fnmatch" @`E questo il modo per caricare l'estensione. -@cindex @code{fnmatch()}, estensione -@cindex estensione @code{fnmatch()} +@cindex @code{fnmatch()} (estensione) +@cindex estensione @subentry @code{fnmatch()} @item risultato = fnmatch(pattern, stringa, flags) Il valore restituito @`e zero se tutto va bene, oppure @code{FNM_NOMATCH} se la funzione non ha trovato alcuna corrispondenza, o @@ -39738,8 +39899,8 @@ L'estensione @code{fork} mette a disposizione tre funzioni, come segue: @item @@load "fork" Questo @`e il modo per caricare l'estensione. -@cindex @code{fork()}, estensione -@cindex estensione @code{fork()} +@cindex @code{fork()} (estensione) +@cindex estensione @subentry @code{fork()} @item pid = fork() Questa funzione crea un nuovo processo. Il valore restituito @`e zero nel processo ``figlio'' e il numero che identifica il nuovo processo @@ -39748,15 +39909,15 @@ in caso di errore. In quest'ultimo caso, @code{ERRNO} indica il problema. Nel processo figlio, gli elementi @code{PROCINFO["pid"]} e @code{PROCINFO["ppid"]} vengono aggiornati per riflettere i valori corretti. -@cindex @code{waitpid()}, estensione -@cindex estensione @code{waitpid()} +@cindex @code{waitpid()} (estensione) +@cindex estensione @subentry @code{waitpid()} @item ret = waitpid(pid) Questa funzione ha un unico argomento numerico, l'identificativo del processo di cui aspettare l'esito. Il codice di ritorno @`e quello restituito dalla chiamata di sistema @code{waitpid()}. -@cindex @code{wait()}, estensione -@cindex estensione @code{wait()} +@cindex @code{wait()} (estensione) +@cindex estensione @subentry @code{wait()} @item ret = wait() Questa funzione attende che il primo processo ``figlio'' termini. Il valore restituito @`e quello della chiamata di sistema @code{wait()}. @@ -39778,8 +39939,8 @@ else @node Esempio di estensione Inplace @subsection Consentire la modifica in loco dei file -@cindex @code{inplace}, estensione -@cindex estensione @code{inplace()} +@cindex @code{inplace} (estensione) +@cindex estensione @subentry @code{inplace()} L'estensione @code{inplace} svolge un lavoro simile a quello dell'opzione @option{-i} nel programma di utilit@`a GNU @command{sed}, che svolge delle funzioni di modifica ``al volo'' su ogni file in input. @@ -39936,13 +40097,13 @@ L'estensione @code{ordchr} aggiunge due funzioni, di nome @item @@load "ordchr" Questo @`e il modo per caricare l'estensione. -@cindex @code{ord()}, estensione -@cindex estensione @code{ord()} +@cindex @code{ord()} (estensione) +@cindex estensione @subentry @code{ord()} @item numero = ord(stringa) Restituisce il valore numerico del primo carattere in @code{stringa}. -@cindex @code{Chr}, estensione -@cindex estensione @code{chr()} +@cindex @code{Chr} (estensione) +@cindex estensione @subentry @code{chr()} @item char = chr(number) Restituisce una stringa il cui primo carattere @`e quello rappresentato da @code{number}. @@ -39965,8 +40126,8 @@ L'estensione @code{readdir} aggiunge un analizzatore di input per esaminare directory. L'uso @`e il seguente: -@cindex @code{readdir}, estensione -@cindex estensione @code{readdir()} +@cindex @code{readdir} (estensione) +@cindex estensione @subentry @code{readdir()} @example @@load "readdir" @end example @@ -40027,8 +40188,8 @@ come @`e possibile scrivere un processore di output, anche se pu@`o essere a prima vista vagamente divertente. Ecco un esempio: -@cindex @code{revoutput}, estensione -@cindex estensione @code{revoutput()} +@cindex @code{revoutput} (estensione) +@cindex estensione @subentry @code{revoutput()} @example @@load "revoutput" @@ -40050,8 +40211,8 @@ poi rileggere dal programma @command{awk}. Il motivo per cui @`e stata scritta sembrare un programma vagamente divertente. Il seguente esempio mostra come usarlo: -@cindex @code{revtwoway}, estensione -@cindex estensione @code{revtwoway()} +@cindex @code{revtwoway} (estensione) +@cindex estensione @subentry @code{revtwoway()} @example @@load "revtwoway" @@ -40083,16 +40244,16 @@ di nome @code{writea()} e @code{reada()}, come segue: @item @@load "rwarray" Questo @`e il modo per caricare l'estensione. -@cindex @code{writea()}, estensione -@cindex estensione @code{writea()} +@cindex @code{writea()} (estensione) +@cindex estensione @subentry @code{writea()} @item ret = writea(file, vettore) Questa funzione ha come argomento una stringa, che @`e il nome del file sul quale scaricare il vettore, e il vettore stesso @`e il secondo argomento. @code{writea()} @`e in grado di gestire vettori di vettori. Restituisce il valore uno se completa il lavoro o zero se non va a buon fine. -@cindex @code{reada()}, estensione -@cindex estensione @code{reada()} +@cindex @code{reada()} (estensione) +@cindex estensione @subentry @code{reada()} @item ret = reada(file, vettore) @code{reada()} @`e la funzione inversa di @code{writea()}; legge il file il cui nome @`e fornito come primo argomento, riempiendo il @@ -40143,9 +40304,9 @@ di nome @code{readfile()}, e un analizzatore di input: @item @@load "readfile" Questo @`e il modo per caricare l'estensione. -@cindex @code{readfile()}, estensione -@cindex estensione @code{readfile()} -@item risultato = readfile("/qualche/persorso") +@cindex @code{readfile()} (estensione) +@cindex estensione @subentry @code{readfile()} +@item risultato = readfile("/qualche/percorso") L'argomento @`e il nome del file da leggere. Il valore restituito @`e una stringa contenente l'intero contenuto del file richiesto. In caso di errore, la funzione restituisce la stringa vuota e imposta @code{ERRNO}. @@ -40180,8 +40341,8 @@ L'estensione @code{time} aggiunge due funzioni, di nome @item @@load "time" Questo @`e il modo per caricare l'estensione. -@cindex @code{gettimeofday()}, estensione -@cindex estensione @code{gettimeofday()} +@cindex @code{gettimeofday()} (estensione) +@cindex estensione @subentry @code{gettimeofday()} @item ora_corrente = gettimeofday() Restituisce il numero di secondi trascorsi dalle ore 00:00 del giorno 01/01/1970 UTC come valore in virgola mobile. @@ -40195,8 +40356,8 @@ nella piattaforma in uso, questo @`e il valore restituito. In caso contrario, se si sta lavorando con MS-Windows, la chiamata di sistema @`e fatta a @code{GetSystemTimeAsFileTime()}. -@cindex @code{sleep()}, estensione -@cindex estensione @code{sleep()} +@cindex @code{sleep()} (estensione) +@cindex estensione @subentry @code{sleep()} @item risultato = sleep(@var{secondi}) Il programma @command{gawk} resta inattivo (dorme) per i @var{secondi} specificati. Se @var{secondi} ha un valore negativo, @@ -40212,8 +40373,8 @@ ottenere il tempo di attesa richiesto. @node Esempio di estensione API Test @subsection Test per l'API -@cindex @code{testext}, estensione -@cindex estensione @code{testext()} +@cindex @code{testext} (estensione) +@cindex estensione @subentry @code{testext()} L'estensione @code{testext} controlla la funzionalit@`a di parti dell'estensione API che non sono utilizzate negli altri esempi. @@ -40225,12 +40386,10 @@ sorgente per maggiori informazioni. @node gawkextlib @section Il progetto @code{gawkextlib} -@cindex @code{gawkextlib}, estensioni -@cindex estensioni, @code{gawkextlib} -@cindex estensioni, dove trovarle +@cindex estensioni @subentry caricabili @subentry Progetto @code{gawkextlib} -@cindex @code{gawkextlib}, progetto -@cindex progetto @code{gawkextlib} +@cindex @code{gawkextlib} (Progetto) +@cindex progetto @subentry @code{gawkextlib} Il progetto @uref{https://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}} fornisce varie estensioni per @command{gawk}, compresa una per l'elaborazione dei file XML. Questa @`e un'evoluzione del progetto noto come @@ -40264,8 +40423,8 @@ Estensione analizzatore XML, usando la libreria di analisi XML @uref{https://expat.sourceforge.net, Expat} @end itemize -@cindex @command{git}, programma di utilit@`a -@cindex programma di utilit@`a @command{git} +@cindex @command{git} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{git} Si pu@`o scaricare il codice del progetto @code{gawkextlib} usando il codice sorgente mantenuto tramite @uref{https://git-scm.com, Git}. @@ -40275,13 +40434,13 @@ Il comando per farlo @`e il seguente: git clone git://git.code.sf.net/p/gawkextlib/code gawkextlib-code @end example -@cindex RapidJson, libreria per analizzare JSON -@cindex JSON, RapidJson, libreria per analizzare +@cindex RapidJson @subentry libreria per analizzare JSON +@cindex JSON @subentry RapidJson @subentry libreria per analizzare Occorre che sia installata la libreria di analisi JSON per poter generare e usare l'estensione @code{json}. -@cindex Expat, libreria per analizzare XML -@cindex XML, Expat, libreria per analizzare +@cindex Expat @subentry libreria per analizzare XML +@cindex XML @subentry Expat @subentry libreria per analizzare Per poter compilare e usare l'estensione XML, @`e necessario installare la libreria di analisi XML @uref{https://expat.sourceforge.net, Expat}. @@ -40592,8 +40751,8 @@ documentazione online}. @node V7/SVR3.1 @appendixsec Differenze importanti tra V7 e System V Release 3.1 -@cindex @command{awk}, versioni di -@cindex @command{awk}, versioni di, differenze tra V7 e SVR3.1 +@cindex @command{awk} @subentry versioni di +@cindex @command{awk} @subentry versioni di @subentry differenze tra V7 e SVR3.1 Il liguaggio @command{awk} si @`e evoluto considerevolmente tra Unix versione 7 (1978) e la nuova implementazione disponibile a partire da Unix System V @@ -40683,7 +40842,7 @@ Vettori multidimensionali @node SVR4 @appendixsec Differenze tra le versioni System V Release 3.1 e SVR4 -@cindex @command{awk}, versioni di, differenze tra SVR3.1 e SVR4 +@cindex @command{awk} @subentry versioni di @subentry differenze tra SVR3.1 e SVR4 La versione per Unix System V Release 4 (1989) di @command{awk} ha aggiunto queste funzionalit@`a (alcune delle quali introdotte da @command{gawk}): @@ -40747,8 +40906,8 @@ effettuato tramite la riga di comando @node POSIX @appendixsec Differenze tra versione SVR4 e POSIX di @command{awk} -@cindex @command{awk}, versioni di, differenze tra SVR4 e POSIX @command{awk} -@cindex POSIX @command{awk}, differenze tra versioni @command{awk} +@cindex @command{awk} @subentry versioni di @subentry differenze tra SVR4 e POSIX @command{awk} +@cindex POSIX @command{awk} @subentry differenze tra versioni @command{awk} Lo standard POSIX Command Language and Utilities per @command{awk} (1992) ha introdotto le seguenti modifiche al linguaggio: @@ -40807,9 +40966,9 @@ Lo standard POSIX 2008 @`e reperibile online a: @node BTL @appendixsec Estensioni nell'@command{awk} di Brian Kernighan -@cindex @command{awk}, versioni di, si veda anche Brian Kernighan, @command{awk} di -@cindex estensioni, Brian Kernighan @command{awk} -@cindex Brian Kernighan, @command{awk} di, estensioni +@cindex @command{awk} @subentry versioni di @seealso{Brian Kernighan, @command{awk} di} +@cindex estensioni @subentry Brian Kernighan @command{awk} +@cindex Brian Kernighan @subentry @command{awk} di @subentry estensioni @cindex Kernighan, Brian Brian Kernighan ha reso disponibile la sua versione nel suo sito. @@ -40855,10 +41014,10 @@ disponibile nel suo @command{awk}. @node POSIX/GNU @appendixsec Estensioni di @command{gawk} non in POSIX @command{awk} -@cindex modalit@`a compatibile di (@command{gawk}), estensioni nella -@cindex estensioni nella modalit@`a compatibile di (@command{gawk}) -@cindex estensioni, in @command{gawk}, non in POSIX @command{awk} -@cindex POSIX, estensioni @command{gawk} non incluse in +@cindex modalit@`a compatibile di (@command{gawk}) @subentry estensioni nella +@cindex estensioni @subentry nella modalit@`a compatibile di (@command{gawk}) +@cindex estensioni @subentry in @command{gawk}, non in POSIX @command{awk} +@cindex POSIX @subentry estensioni @command{gawk} non incluse in L'implementazione GNU di @command{gawk} aggiunge molte funzionalit@`a. Queste possono essere disabilitate completamente sia con l'opzione @option{--traditional} che con l'opzione @@ -41004,7 +41163,7 @@ per contenere eventuali sottoespressioni individuate all'interno di una (@pxref{Funzioni per stringhe}) @item -Specificatori posizionali nei formati di @code{printf} per facilitare +Specificatori di posizione nei formati di @code{printf} per facilitare le traduzioni di messaggi (@pxref{Ordinamento di printf}) @@ -41488,7 +41647,7 @@ di una @dfn{regexp} (@pxref{Funzioni per stringhe}). @item -Specificatori posizionali nelle stringhe di formato di @code{printf} per +Specificatori di posizione nelle stringhe di formato di @code{printf} per facilitare la traduzione di messaggi (@pxref{Ordinamento di printf}). @@ -41526,7 +41685,7 @@ Le funzioni @code{and()}, @code{or()}, @code{xor()}, @code{compl()}, @end itemize @item -@cindex @code{next file} statement +@cindex @code{next file} (istruzione obsoleta) Il supporto per @samp{next file} scritto come due parole @`e stato rimosso completamente (@pxref{Istruzione nextfile}). @@ -41758,12 +41917,14 @@ con un possibile miglioramento nei tempi di esecuzione @end ifnottex @item +@cindex POSIX @subentry modalit@`a In aderenza agli standard di codifica GNU, le estensioni dinamiche devono definire un simbolo globale che indica che sono compatibili con la licenza GPL (@pxref{Licenza delle estensioni}). @item +@cindex POSIX @subentry modalit@`a In modalit@`a POSIX, i confronti tra stringhe usano le funzioni di libreria @code{strcoll()} / @code{wcscoll()} (@pxref{Confronto POSIX di stringhe}). @@ -42044,8 +42205,8 @@ dettaglio era stato dimenticato al momento in cui era stata preparata la @node Estensioni comuni @appendixsec Sommario Estensioni Comuni -@cindex estensioni, Brian Kernighan @command{awk} -@cindex estensioni, @command{mawk} +@cindex estensioni @subentry Brian Kernighan @command{awk} +@cindex estensioni @subentry @command{mawk} La tabella seguente dettaglia le estensioni comuni supportate da @command{gawk}, da Brian Kernighan @command{awk} e da @command{mawk}, le tre versioni liberamente disponibili pi@`u usate di @command{awk} @@ -42082,6 +42243,8 @@ Questo all'interno di espressioni regolari, le loro relazioni con la localizzazione, e l'effetto da ci@`o determinato su diverse versioni di @command{gawk}. +@cindex ASCII +@cindex EBCDIC Gli strumenti originali Unix aventi a che fare con espressioni regolari stabilivano che intervalli di caratteri (come @samp{[a-z]}) individuavano un carattere qualsiasi tra il primo carattere dell'intervallo e l'ultimo @@ -42152,6 +42315,7 @@ Un tale risultato dipende dalle impostazioni di localizzazione (e quindi potrebbe non succedere sul sistema che si sta usando). @cindex Unicode +@cindex ASCII Considerazioni simili valgono per altri intervalli. Per esempio, @samp{["-/]} @`e perfettamente valido in ASCII, ma non @`e valido in molte localizzazioni Unicode, p.es. in @code{en_US.UTF-8}. @@ -42203,7 +42367,7 @@ In ogni caso @command{gawk} aderisce allo standard POSIX. @node Contributori @appendixsec I principali contributori a @command{gawk} -@cindex @command{gawk}, lista di contributori a +@cindex @command{gawk} @subentry lista di contributori a @quotation @i{Riconoscere sempre il merito, se un merito va riconosciuto.} @author Anonimo @@ -42494,7 +42658,7 @@ Juan Manuel Guerrero ha preso in carico la manutenzione dellla versione DJGPP di @command{gawk}. @item -@cindex Robbins, Arnold +@cindex Robbins @subentry Arnold Arnold Robbins ha lavorato su @command{gawk} dal 1988, dapprima aiutando David Trueman e in seguito, dal 1994 circa, come @@ -42526,6 +42690,8 @@ Queste estensioni possono essere disabilitate specificando l'opzione @option{--traditional} o @option{--posix}. @item +@cindex ASCII +@cindex EBCDIC L'interazione tra localizzazioni POSIX e individuazione di @dfn{regexp} in @command{gawk} @`e stata causa di malintesi nel corso degli anni. Oggi @command{gawk} implementa l'Interpretazione Razionale degli Intervalli @@ -42547,8 +42713,10 @@ esauriente e attribuisca il giusto riconoscimento quando questo @`e dovuto. @appendix Installare @command{gawk} @c last two commas are part of see also -@cindex sistemi operativi, si veda anche GNU/Linux@comma{} sistemi operativi per PC@comma{} Unix -@cindex @command{gawk}, installare +@cindex sistemi operativi +@cindex sistemi operativi @seealso{GNU/Linux} +@cindex sistemi operativi @seealso{Linux} +@cindex @command{gawk} @subentry installare @cindex installare @command{gawk} Quest'appendice contiene istruzioni per installare @command{gawk} sulle varie piattaforme supportate dagli sviluppatori. Lo sviluppatore @@ -42571,8 +42739,8 @@ della versione specifica di una particolare piattaforma. @node Distribuzione di Gawk @appendixsec La distribuzione di @command{gawk} -@cindex codice sorgente di @command{gawk} -@cindex sorgente, codice, @command{gawk} +@cindex codice sorgente @subentry @command{gawk} +@cindex sorgente @subentry codice @subentry @command{gawk} Questa @value{SECTION} spiega come ottenere la distribuzione di @command{gawk}, come scompattarla, e cosa @`e contenuto nei vari file @@ -42586,8 +42754,8 @@ e nelle sottodirectory risultanti. @node Scaricare @appendixsubsec Ottenere la distribuzione di @command{gawk} -@cindex @command{gawk}, codice sorgente@comma{} ottenere il -@cindex codice sorgente di @command{gawk}, ottenere il +@cindex @command{gawk} @subentry codice sorgente @subentry ottenere il +@cindex codice sorgente @subentry @command{gawk} @subentry ottenere il Ci sono due modi per ottenere del software GNU: @itemize @value{BULLET} @@ -42670,7 +42838,7 @@ Si dovrebbe sentire un esperto di quel sistema. @node Contenuti della distribuzione @appendixsubsec Contenuti della distribuzione @command{gawk} -@cindex @command{gawk}, distribuzione di +@cindex @command{gawk} @subentry distribuzione di @cindex distribuzione di @command{gawk} La distribuzione di @command{gawk} contiene un certo numero di file @@ -42732,8 +42900,8 @@ sono lasciati indefiniti, o ai quali @command{gawk} non pu@`o conformarsi pienamente, come pure una lista di specifiche che lo standard POSIX dovrebbe contenere, ma che non sono presenti. -@cindex intelligenza artificiale, @command{gawk} e -@cindex @command{gawk} e l'intelligenza artificiale +@cindex intelligenza artificiale @subentry @command{gawk} e +@cindex @command{gawk} @subentry e l'intelligenza artificiale @item doc/awkforai.txt Puntatori alla bozza originale di un breve articolo che spiega perch@'e @command{gawk} @`e un linguaggio adatto alla @@ -42948,14 +43116,14 @@ usando il comando GNU Autoconf. @ifnotinfo (Il software Autoconf @`e descritto in dettaglio in -@cite{Autoconf---Generating Automatic Configuration Scripts}, +@cite{Autoconf --- Generating Automatic Configuration Scripts}, che pu@`o essere trovato in rete sul sito @uref{https://www.gnu.org/software/autoconf/manual/index.html, della Free Software Foundation}.) @end ifnotinfo @ifinfo (Il software Autoconf @`e descritto in dettaglio a partire da -@inforef{Top, , Autoconf, autoconf,Autoconf---Generating Automatic Configuration Scripts}.) +@inforef{Top, , Autoconf, autoconf,Autoconf --- Generating Automatic Configuration Scripts}.) @end ifinfo Per configurare @command{gawk} basta eseguire @command{configure}: @@ -43030,34 +43198,34 @@ su altre piattaforme, la posizione corretta pu@`o essere differente. @table @command -@cindex @command{gawkpath_default}, funzione della shell -@cindex funzione della shell @command{gawkpath_default} +@cindex @command{gawkpath_default} (funzione della shell) +@cindex funzione della shell @subentry @command{gawkpath_default} @item gawkpath_default Ripristina la variabile d'ambiente @env{AWKPATH} al suo valore di default. -@cindex @command{gawkpath_prepend}, funzione della shell -@cindex funzione della shell @command{gawkpath_prepend} +@cindex @command{gawkpath_prepend} (funzione della shell) +@cindex funzione della shell @subentry @command{gawkpath_prepend} @item gawkpath_prepend Aggiunge l'argomento all'inizio della variabile d'ambiente @env{AWKPATH}. -@cindex @command{gawkpath_append}, funzione della shell -@cindex funzione della shell @command{gawkpath_append} +@cindex @command{gawkpath_append} (funzione della shell) +@cindex funzione della shell @subentry @command{gawkpath_append} @item gawkpath_append Aggiunge l'argomento alla fine della variabile d'ambiente @env{AWKPATH}. -@cindex @command{gawklibpath_default}, funzione della shell -@cindex funzione della shell @command{gawklibpath_default} +@cindex @command{gawklibpath_default} (funzione della shell) +@cindex funzione della shell @subentry @command{gawklibpath_default} @item gawklibpath_default Reimposta la variabile d'ambiente @env{AWKLIBPATH} al suo valore di default. -@cindex @command{gawklibpath_prepend}, funzione della shell -@cindex funzione della shell @command{gawklibpath_prepend} +@cindex @command{gawklibpath_prepend} (funzione della shell) +@cindex funzione della shell @subentry @command{gawklibpath_prepend} @item gawklibpath_prepend Aggiunge l'argomento all'inizio della variabile d'ambiente @env{AWKLIBPATH}. -@cindex @command{gawklibpath_append}, funzione della shell -@cindex funzione della shell @command{gawklibpath_append} +@cindex @command{gawklibpath_append} (funzione della shell) +@cindex funzione della shell @subentry @command{gawklibpath_append} @item gawklibpath_append Aggiunge l'argomento alla fine della variabile d'ambiente @env{AWKLIBPATH}. @@ -43067,8 +43235,9 @@ Aggiunge l'argomento alla fine della variabile d'ambiente @node Ulteriori opzioni di configurazione @appendixsubsec Ulteriori opzioni di configurazione -@cindex @command{gawk}, configurazione, opzioni di -@cindex configurazione di @command{gawk}, opzioni di +@cindex @command{gawk} @subentry configurazione @subentry opzioni di +@cindex configurazione di @command{gawk} @subentry opzioni di +@cindex opzioni di configurazione @subentry di @command{gawk} Ci sono parecchie altre opzioni che si possono utilizzare sulla riga di comando di @command{configure} @@ -43076,8 +43245,8 @@ quando si compila @command{gawk} a partire dai sorgenti, tra cui: @table @code -@cindex @option{--disable-extensions}, opzione di configurazione -@cindex opzione di configurazione @code{--disable-extensions} +@cindex @option{--disable-extensions} (opzione di configurazione) +@cindex opzioni di configurazione @subentry @option{--disable-extensions} @item --disable-extensions Disabilita il meccanismo delle estensioni all'interno di @command{gawk}. Specificando quest'opzione non @`e possibile @@ -43090,8 +43259,8 @@ su un'altra piattaforma. L'azione di default @`e di controllare dinamicamente se le estensioni possono essere configurate e compilate. -@cindex @option{--disable-lint}, opzione di configurazione -@cindex opzione di configurazione @code{--disable-lint} +@cindex @option{--disable-lint} (opzione di configurazione) +@cindex opzioni di configurazione @subentry @code{--disable-lint} @item --disable-lint Disabilitare i controlli @dfn{lint} all'interno di @command{gawk}. Le opzioni @option{--lint} e @option{--lint-old} @@ -43115,23 +43284,23 @@ Se si usa quest'opzione alcuni dei test di funzionalit@`a non avranno successo. Quest'opzione potr@`a essere rimossa in futuro. @end quotation -@cindex @option{--disable-mpfr}, opzione di configurazione -@cindex opzione di configurazione @code{--disable-mpfr} +@cindex @option{--disable-mpfr} (opzione di configurazione) +@cindex opzioni di configurazione @subentry @code{--disable-mpfr} @item --disable-mpfr Non effettuare il controllo delle librerie MPFR e GMP. Ci@`o pu@`o essere utile principalmente per gli sviluppatori, per assicurarsi che tutto funzioni regolarmente nel caso in cui il supporto MPFR non sia disponibile. -@cindex @option{--disable-nls}, opzione di configurazione -@cindex opzione di configurazione @code{--disable-nls} +@cindex @option{--disable-nls} (opzione di configurazione) +@cindex opzioni di configurazione @subentry @code{--disable-nls} @item --disable-nls Non attivare la traduzione automatica dei messaggi. Ci@`o normalmente non @`e consigliabile, ma pu@`o apportare qualche lieve miglioramento nei tempi di esecuzione di un programma. -@cindex @option{--enable-versioned-extension-dir}, opzione di configurazione -@cindex opzione di configuzazione @code{--enable-versioned-extension-dir} +@cindex @option{--enable-versioned-extension-dir} (opzione di configurazione) +@cindex opzioni di configurazione @subentry @code{--enable-versioned-extension-dir} @item --enable-versioned-extension-dir Usare una directory con l'indicazione della versione per le estensioni. Il nome della directory conterr@`a la versione principale e quella @@ -43147,7 +43316,7 @@ delle opzioni disponibili in @command{configure}. @node Filosofia della configurazione @appendixsubsec Il processo di configurazione -@cindex @command{gawk}, configurazione di +@cindex @command{gawk} @subentry configurazione di @cindex configurazione di @command{gawk} Questa @value{SECTION} interessa solo a chi abbia un minimo di familiarit@`a con il linguaggio C e con i sistemi operativi di tipo Unix. @@ -43173,7 +43342,7 @@ corrente. Per esempio, pu@`o non esserci l'elemento @code{st_blksize} nella struttura @code{stat}. In questo caso, @samp{HAVE_STRUCT_STAT_ST_BLKSIZE} @`e indefinito. -@cindex @code{custom.h}, file +@cindex @code{custom.h} (file) @`E possible che il compilatore C del sistema in uso "tragga in inganno" @command{configure}. Pu@`o succedere nel caso in cui non viene restituito un errore se una funzione di libreria non @`e disponibile. Per superare questo @@ -43208,9 +43377,9 @@ vari sistemi non-Unix. @node Installazione su PC @appendixsubsec Installazione su MS-Windows -@cindex PC, @command{gawk} su sistemi operativi -@cindex sistemi operativi per PC, @command{gawk} su -@cindex installare @command{gawk} su sistemi operativi per PC +@cindex PC @subentry @command{gawk} su sistemi operativi +@cindex sistemi operativi @subentry per PC @subentry @command{gawk} su +@cindex installare @command{gawk} @subentry su sistemi operativi per PC Questa @value{SECTION} tratta dell'installazione e uso di @command{gawk} su macchine con architettura Intel che eseguono qualsiasi versione di MS-Windows. @@ -43232,6 +43401,7 @@ Si veda anche il file @file{README_d/README.pc} nella distribuzione. @node Installazione binaria su PC @appendixsubsubsec Installare una distribuzione predisposta per sistemi MS-Windows +@cindex installare @command{gawk} @subentry su MS-Windows La sola distribuzione binaria predisposta supportata per i sistem MS-Windows @`e quella messa a disposizione da Eli Zaretskii @@ -43247,7 +43417,7 @@ Il file @file{README_d/README.pc} nella distribuzione @command{gawk} contiene ulteriori annotazioni, e il file @file{pc/Makefile} contiene informazioni importanti sulle opzioni di compilazione. -@cindex compilare @command{gawk} per MS-Windows +@cindex compilare @command{gawk} @subentry per MS-Windows Per compilare @command{gawk} per Windows32, occorre copiare i file dalla directory @file{pc} (@emph{tranne} il file @file{ChangeLog}) alla directory che contiene il resto dei sorgenti di @command{gawk}, e quindi @@ -43267,8 +43437,8 @@ usando gli strumenti MinGW, scrivere @samp{make mingw32}. @node Uso su PC @appendixsubsubsec Usare @command{gawk} su sistemi operativi PC -@cindex PC, @command{gawk} su sistemi operativi -@cindex sistemi operativi PC, @command{gawk} su +@cindex PC @subentry @command{gawk} su sistemi operativi per +@cindex sistemi operativi @subentry per PC @subentry @command{gawk} su Sotto MS-Windows, l'ambiente MinGW consente di usare sia l'operatore @samp{|&} che le operazioni su rete TCP/IP @@ -43276,12 +43446,12 @@ sia l'operatore @samp{|&} che le operazioni su rete TCP/IP L'ambiente DJGPP non consente di usare @samp{|&}. @cindex percorso di ricerca -@cindex percorso di ricerca per file sorgente -@cindex @command{gawk}, versione MS-Windows di -@cindex @code{;} (punto e virgola), @env{AWKPATH} variabile e -@cindex punto e virgola (@code{;}), @env{AWKPATH} variabile e -@cindex @env{AWKPATH}, variabile d'ambiente -@cindex variabile d'ambiente @env{AWKPATH} +@cindex percorso di ricerca @subentry per file sorgente +@cindex @command{gawk} @subentry versione MS-Windows di +@cindex @code{;} (punto e virgola) @subentry @env{AWKPATH} variabile e +@cindex punto e virgola (@code{;}) @subentry @env{AWKPATH} variabile e +@cindex @env{AWKPATH} (variabile d'ambiente) +@cindex variabili d'ambiente @subentry @env{AWKPATH} Le versioni MS-Windows di @command{gawk} ricercano i file di programma come descritto in @ref{AWKPATH (Variabile)}. Comunque, gli elementi della variabile @env{AWKPATH} sono separati tra di loro da un punto e virgola @@ -43289,11 +43459,10 @@ della variabile @env{AWKPATH} sono separati tra di loro da un punto e virgola Se @env{AWKPATH} @`e non impostata o ha per valore la stringa nulla, il percorso di ricerca di default @`e @samp{@w{.;c:/lib/awk;c:/gnu/lib/awk}}. -@cindex estensioni comuni, variabile @code{BINMODE} -@c @cindex extensions, common@comma{} @code{BINMODE} variable -@cindex differenze tra @command{awk} e @command{gawk}, variabile @code{BINMODE} -@cindex @code{BINMODE}, variabile -@cindex variabile @code{BINMODE} +@cindex estensioni comuni @subentry variabile @code{BINMODE} +@cindex differenze tra @command{awk} e @command{gawk} @subentry variabile @code{BINMODE} +@cindex @code{BINMODE} (variabile) +@cindex variabile @subentry @code{BINMODE} Sotto MS-Windows, @command{gawk} (come molti altri programmi di trattamento testi) converte automaticamente la stringa di fine riga @samp{\r\n} in @samp{\n} leggendo dall'input @@ -43394,8 +43563,8 @@ esempio l'impostazione di @code{RS} pu@`o essere spostata in una regola @node Cygwin @appendixsubsubsec Usare @command{gawk} in ambiente Cygwin -@cindex compilare @command{gawk} per Cygwin -@cindex Cygwin, compilare @command{gawk} per +@cindex compilare @command{gawk} @subentry per Cygwin +@cindex Cygwin @subentry compilare @command{gawk} per @command{gawk} pu@`o essere compilato e usato ``cos@`{@dotless{i}} com'@`e'' sotto MS-Windows se si opera all'interno dell'ambiente @uref{http://www.cygwin.com, Cygwin}. @@ -43412,9 +43581,14 @@ make && make check In confronto a un sistema GNU/Linux sulla stessa macchina, l'esecuzione del passo di @samp{configure} sotto Cygwin richiede molto pi@`u tempo. -Tuttavia si conclude regolarmente, e poi @samp{make} funziona come ci si +Tuttavia si conclude regolarmente, e poi @samp{make} procede come ci si aspetta. +@cindex installare @command{gawk} @subentry su Cygwin +SI pu@`o anche installare @command{gawk} con la procedura di installazione +normalmente usata per tutto il software Cygwin. +In generale, Cygwin fornisce l'ultima versione rilasciata di @command{gawk}. + Le versioni pi@`u recenti di Cygwin aprono tutti i file in modalit@`a binaria. Ci@`o implica che si dovrebbe usare @samp{RS = "\r?\n"} per riuscire a gestire file di testo MS-Windows in formato standard, in cui ogni riga @@ -43441,9 +43615,9 @@ automaticamente la conversione di @code{"\r\n"}, mentre cos@`{@dotless{i}} non @ @c now rankin@pactechdata.com @c now r.pat.rankin@gmail.com -@cindex @command{gawk}, versione VMS di -@cindex installare @command{gawk} su VMS -@cindex VMS, installare @command{gawk} su +@cindex @command{gawk} @subentry versione VMS di +@cindex installare @command{gawk} @subentry su VMS +@cindex VMS @subentry installare @command{gawk} su Questa @value{SUBSECTION} descrive come compilare e installare @command{gawk} sotto VMS. Il termine classico ``VMS'' @`e usato qui anche per designare OpenVMS. @@ -43461,8 +43635,8 @@ OpenVMS. @node Compilazione su VMS @appendixsubsubsec Compilare @command{gawk} su VMS -@cindex compilare @command{gawk} per VMS -@cindex VMS, compilare @command{gawk} per +@cindex compilare @command{gawk} @subentry per VMS +@cindex VMS @subentry compilare @command{gawk} per Per compilare @command{gawk} sotto VMS, esiste una procedura di comandi @code{DCL} che esegue tutti i comandi @code{CC} e @code{LINK} necessari. C'@`e @@ -43672,8 +43846,8 @@ per forzare un esame dei parametri in stile Unix, piuttosto che nella modalit@`a parametri, per esempio, pi@`u @value{DF} in input) @`e presente, non c'@`e ambiguit@`a, e l'opzione @option{--} pu@`o essere omessa. -@cindex codice di ritorno, di @command{gawk}, in VMS -@cindex exit, codice di ritorno, di @command{gawk}, in VMS +@cindex codice di ritorno @subentry di @command{gawk} @subentry in VMS +@cindex @code{exit} (istruzione) @subentry codice di ritorno di @command{gawk}, in VMS Il valore di @code{exit} @`e un valore in stile Unix e viene trasformato in un codice di ritorno VMS all'uscita del programma. @@ -43703,8 +43877,8 @@ un errore fatale come 4, e tutti gli altri valori erano restituiti immodificati. Questa era una violazione rispetto alle specifiche di codifica delle condizioni di uscita di VMS. -@cindex numeri in virgola mobile, VAX/VMS -@cindex VAX/VMS, numeri in virgola mobile, +@cindex numeri @subentry in virgola mobile @subentry VAX/VMS +@cindex VAX/VMS @subentry numeri in virgola mobile, L'aritmetica in virgola mobile VAX/VMS usa un arrotondamento statistico. @xref{Funzione round}. @@ -43714,8 +43888,7 @@ VMS, come VAX/VMS 7.3, non impostano questi nomi logici. @c @cindex directory search @c @cindex path, search -@cindex percorso di ricerca -@cindex percorso di ricerca per file sorgente +@cindex percorso di ricerca @subentry per file sorgente Il percorso di ricerca di default, nella ricerca dei file di programma per @command{awk} specificati dall'opzione @option{-f}, @`e @code{"SYS$DISK:[],AWK_LIBRARY:"}. Il nome logico @env{AWKPATH} pu@`o essere @@ -43851,8 +44024,8 @@ Si raccomanda di compilare e usare la versione corrente. @end quotation @c the radio show, not the book. :-) -@cindex debug, @command{gawk}, segnalare bug -@cindex risoluzione problemi @command{gawk}, segnalare bug +@cindex debug @subentry @command{gawk} @subentry segnalare bug +@cindex risoluzione di problemi @subentry @command{gawk} @subentry segnalare bug Se si incontrano problemi con @command{gawk} o se si ritiene di aver trovato un bug, si raccomanda di segnalarlo agli sviluppatori; non c'@`e un impegno preciso a intervenire, ma c'@`e una buona possibilit@`a che ci @@ -43899,10 +44072,10 @@ se il problema @`e un problema di documentazione. Questa informazione si pu@`o ottenere con il comando @samp{gawk --version}. @cindex @code{bug-gawk@@gnu.org} indirizzo per la segnalazione dei bug -@cindex email, indirizzo per segnalare bug, @code{bug-gawk@@gnu.org} -@cindex indirizzo email per segnalare bug, @code{bug-gawk@@gnu.org} -@cindex bug, segnalare, indirizzo email, @code{bug-gawk@@gnu.org} -@cindex segnalare bug, indirizzo email, @code{bug-gawk@@gnu.org} +@cindex email @subentry indirizzo per segnalare bug @subentry @code{bug-gawk@@gnu.org} +@cindex indirizzo email per segnalare bug @subentry @code{bug-gawk@@gnu.org} +@cindex bug @subentry segnalare @subentry indirizzo email, @code{bug-gawk@@gnu.org} +@cindex segnalare bug @subentry indirizzo email @subentry @code{bug-gawk@@gnu.org} Una volta pronta la descrizione precisa del problema, si spedisca un messaggio di posta elettronica a @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org}. @@ -43952,7 +44125,7 @@ nella corrispondenza con la lista @c To: Aharon Robbins <arnold@skeeve.com> @c CC: chet.ramey@case.edu Ho iniziato a ignorare Usenet un paio di anni fa, e non me ne sono mai -pentito. @`E come quando si parla di sport alla radio---ci si sente +pentito. @`E come quando si parla di sport alla radio --- ci si sente pi@`u intelligenti per aver lasciato perdere. @author Chet Ramey @end quotation @@ -44002,10 +44175,10 @@ Le persone che si occupano delle varie versioni di @command{gawk} sono: @c put the index entries outside the table, for docbook @cindex Buening, Andreas -@cindex Malmberg, John E. +@cindex Malmberg, John @cindex Pitts, Dave @cindex G., Daniel Richard -@cindex Robbins, Arnold +@cindex Robbins @subentry Arnold @cindex Zaretskii, Eli @cindex Guerrero, Juan Manuel @ifset SMALLPRINT @@ -44042,8 +44215,8 @@ versione sar@`a rimossa dalla distribuzione. @node Altre versioni @appendixsec Altre implementazioni di @command{awk} liberamente disponibili -@cindex @command{awk}, implementazioni di -@cindex implementazioni di @command{awk} +@cindex @command{awk} @subentry implementazioni di +@cindex implementazione @subentry di @command{awk} @ignore From: emory!amc.com!brennan (Michael Brennan) Subject: C++ comments in awk programs @@ -44077,10 +44250,10 @@ Questa @value{SECTION} descrive in breve dove @`e possibile trovarle: @table @asis @cindex Kernighan, Brian -@cindex sorgente, codice, Brian Kernighan @command{awk} -@cindex codice sorgente, Brian Kernighan @command{awk} -@cindex @command{awk}, versioni di, si veda anche Brian Kernighan, @command{awk} di -@cindex Brian Kernighan, @command{awk} di, codice sorgente +@cindex sorgente @subentry codice @subentry Brian Kernighan @command{awk} +@cindex codice sorgente @subentry Brian Kernighan @command{awk} +@cindex @command{awk} @subentry versioni di @seealso{Brian Kernighan, @command{awk} di} +@cindex Brian Kernighan @subentry @command{awk} di @subentry codice sorgente @item Unix @command{awk} Brian Kernighan, uno degli sviluppatori originali di Unix @command{awk}, ha reso disponibile liberamente la sua implementazione di @command{awk}. @@ -44112,9 +44285,9 @@ versioni di BWK @command{awk} che @`e riuscito a trovare. @`E disponibile in @uref{git://github.com/danfuzz/one-true-awk}. @cindex Brennan, Michael -@cindex @command{mawk}, programma di utilit@`a -@cindex programma di utilit@`a @command{mawk} -@cindex codice sorgente, @command{mawk} +@cindex @command{mawk} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{mawk} +@cindex codice sorgente @subentry @command{mawk} @item @command{mawk} Michael Brennan ha scritto un'implementazione indipendente di @command{awk}, di nome @command{mawk}. @`E disponibile sotto la licenza @@ -44150,10 +44323,10 @@ Le sue versioni di sviluppo sono disponibili tramite Git dalla pagina GitHub @uref{https://github.com/mikebrennan000/mawk-2, del progetto}. @cindex Sumner, Andrew -@cindex @command{awka}, compilatore per @command{awk} -@cindex compilatore per @command{awk}, @command{awka} -@cindex sorgente, codice, @command{awka} -@cindex codice sorgente di @command{awka} +@cindex @command{awka} @subentry compilatore per @command{awk} +@cindex compilatore per @command{awk} @subentry @command{awka} +@cindex sorgente @subentry codice @subentry @command{awka} +@cindex codice sorgente @subentry @command{awka} @item @command{awka} Scritto da Andrew Sumner, @command{awka} traduce i programmi @command{awk} in C, li compila, @@ -44174,8 +44347,8 @@ codice sorgente dal 2001 circa. @cindex Beebe, Nelson H.F.@: @cindex @command{pawk} (versione con profilazione di Brian Kernighan @command{awk}) -@cindex codice sorgente, @command{pawk} -@cindex sorgente, codice, @command{pawk} +@cindex codice sorgente @subentry @command{pawk} +@cindex sorgente @subentry codice @subentry @command{pawk} @item @command{pawk} Nelson H.F.@: Beebe all'Universit@`a dello Utah ha modificato BWK @command{awk} per fornire informazioni di temporizzazione e profilazione. @@ -44190,8 +44363,8 @@ che in @item BusyBox @command{awk} @cindex BusyBox Awk -@cindex codice sorgente, BusyBox Awk -@cindex sorgente, codice, BusyBox Awk +@cindex codice sorgente @subentry BusyBox Awk +@cindex sorgente @subentry codice @subentry BusyBox Awk BusyBox @`e un programma distribuito con licenza GPL che fornisce versioni ridotte di parecchie piccole applicazioni, all'interno di un singolo modulo eseguibile. @`E stato ideato per sistemi @@ -44203,9 +44376,9 @@ directory @file{/usr/local/bin} del sistema corrente. Per ulteriori informazioni, si veda @uref{https://busybox.net, la pagina principale del progetto}. @cindex OpenSolaris -@cindex Solaris, versione POSIX @command{awk} -@cindex codice sorgente, Solaris @command{awk} -@cindex sorgente, codice, Solaris @command{awk} +@cindex Solaris @subentry versione POSIX @command{awk} +@cindex codice sorgente @subentry Solaris @command{awk} +@cindex sorgente @subentry codice @subentry Solaris @command{awk} @item POSIX @command{awk} per OpenSolaris Le versioni di @command{awk} in @file{/usr/xpg4/bin} e @file{/usr/xpg6/bin} su Solaris sono @dfn{grosso modo} conformi allo standard POSIX. Sono basate sul @@ -44215,10 +44388,9 @@ ore di lavoro. Rendere questo codice pi@`u generalmente portabile (usando gli strumenti GNU Autoconf e/o Automake) richiederebbe ulteriore lavoro, che non @`e stato fin qui compiuto, almeno per quel che risulta a chi scrive. -@cindex Illumos -@cindex Illumos, @command{awk} conforme a POSIX e -@cindex codice sorgente, Illumos @command{awk} -@cindex sorgente, codice, Illumos @command{awk} +@cindex Illumos @subentry @command{awk} conforme a POSIX e +@cindex codice sorgente @subentry Illumos @command{awk} +@cindex sorgente @subentry codice @subentry Illumos @command{awk} Il codice sorgente era un tempo disponibile dal sito web OpenSolaris. Tuttavia, il progetto @`e terminato, e il sito web chiuso. Fortunatamente, il progetto @@ -44227,10 +44399,11 @@ mette a disposizione questa implementazione. Si possono vedere i singoli file i @uref{https://github.com/joyent/illumos-joyent/blob/master/usr/src/cmd/awk_xpg4}. @cindex @command{goawk} -@cindex Go, implementazione di @command{awk} -@cindex sorgente, @command{goawk} -@cindex @command{goawk}, sorgente di -@cindex linguaggio di programmazione, Go +@cindex Go @subentry implementazione di @command{awk} +@cindex sorgente @subentry @command{goawk} +@cindex @command{goawk} @subentry sorgente di +@cindex linguaggi di programmazione @subentry Go +@cindex Go @subentry linguaggio di programmazione @item @command{goawk} Questo @`e un interpretatore di @command{awk} scritto nel @uref{https://golang.org/, Linguaggio di programmazion Go}. @@ -44241,10 +44414,10 @@ L'autore ha scritto un buon che descrive l'implementazione. @cindex @command{jawk} -@cindex Java, implementazione di @command{awk} -@cindex implementazione Java di @command{awk} -@cindex codice sorgente, @command{jawk} -@cindex sorgente, codice, @command{jawk} +@cindex Java @subentry implementazione di @command{awk} +@cindex implementazione @subentry di @command{awk} in Java +@cindex codice sorgente @subentry @command{jawk} +@cindex sorgente @subentry codice @subentry @command{jawk} @item @command{jawk} Questo @`e un interprete per @command{awk} scritto in Java. Dichiara di essere un interprete completo, anche se, poich@'e usa funzionalit@`a di Java @@ -44254,14 +44427,15 @@ Ulteriori informazioni sono disponibili sulla @uref{https://jawk.sourceforge.net, pagina principale del progetto}. @item Libmawk -@cindex @command{libmawk} -@cindex codice sorgente, @command{libmawk} -@cindex sorgente, codice, @command{libmawk} +@cindex @command{libmawk} (interpretatore) +@cindex codice sorgente @subentry @command{libmawk} (interpretatore) +@cindex sorgente @subentry codice @subentry @command{libmawk} (interpretatore) Questo @`e un interprete @command{awk} incorporabile, derivato da @command{mawk}. Per ulteriori informazioni, si veda @uref{http://repo.hu/projects/libmawk/}. -@cindex codice sorgente, interpretatore @command{awk} incorporabile +@cindex codice sorgente @subentry interpretatore @command{awk} incorporabile +@cindex interpretatore @command{awk} incorporabile @subentry codice sorgente @cindex Neacsu, Mircea @item @command{awk} incorporabile di Mircea Neacsu @item incorporabile, @command{awk}, di Mircea Neacsu @@ -44270,9 +44444,9 @@ incorporabile, basato su BWK @command{awk}. @`E disponibile nel sito @uref{https://github.com/neacsum/awk}. @item @code{pawk} -@cindex codice sorgente, @command{pawk} (versione Python) -@cindex sorgente, codice, @command{pawk} (versione Python) -@cindex @code{pawk}, implementazione simile ad @command{awk} per Python +@cindex codice sorgente @subentry @command{pawk} (versione Python) +@cindex sorgente @subentry codice @subentry @command{pawk} (versione Python) +@cindex @code{pawk} @subentry implementazione simile ad @command{awk} per Python Questo @`e un modulo Python che intende introdurre funzionalit@`a di tipo @command{awk} in Python. Si veda @uref{https://github.com/alecthomas/pawk} per ulteriori informazioni. (Questo programma non @`e correlato con la versione @@ -44280,16 +44454,16 @@ modificata da Nelson Beebe di BWK @command{awk}, descritta prima.) @item @w{QSE @command{awk}} @cindex QSE @command{awk} -@cindex codice sorgente, QSE @command{awk} -@cindex sorgente, codice, QSE @command{awk} +@cindex codice sorgente @subentry QSE @command{awk} +@cindex sorgente @subentry codice @subentry QSE @command{awk} Questo @`e un interprete di @command{awk} incorporabile. Per ulteriori informazioni, si veda @uref{https://code.google.com/p/qse/}. @c e @uref{http://awk.info/?tools/qse}. @item @command{QTawk} @cindex QuikTrim Awk -@cindex codice sorgente, QuikTrim Awk -@cindex sorgente, codice, QuikTrim Awk +@cindex codice sorgente @subentry QuikTrim Awk +@cindex sorgente @subentry codice @subentry QuikTrim Awk Questa @`e un'implementazione indipendente di @command{awk} distribuita con la licenza GPL. Ha un gran numero di estensioni rispetto ad @command{awk} standard, e pu@`o non essere sintatticamente compatibile al 100% con esso. Si @@ -44356,8 +44530,8 @@ gratuitamente. Molte rispettano lo standard POSIX; altre un po' meno. @ifclear FOR_PRINT @node Note @appendix Note di implementazione -@cindex @command{gawk}, problemi di implementazione -@cindex problemi di implementazione, @command{gawk} +@cindex @command{gawk} @subentry problemi di implementazione +@cindex problemi di implementazione @subentry @command{gawk} Quest'appendice contiene informazioni che interessano soprattutto le persone che aggiornano e mantengono @command{gawk}. L'intero contenuto si applica @@ -44378,11 +44552,11 @@ specificatamente a @command{gawk} e non ad altre implementazioni. @node Modalit@`a di compatibilit@`a @appendixsec Compatibilit@`a all'indietro e debug -@cindex @command{gawk}, problemi di implementazione, compatibilit@`a all'indietro -@cindex @command{gawk}, problemi di implementazione, debug -@cindex risoluzione di problemi, @command{gawk} -@cindex problemi, risoluzione di, @command{gawk} -@cindex problemi di implementazione@comma{} @command{gawk}, debug +@cindex @command{gawk} @subentry problemi di implementazione @subentry compatibilit@`a all'indietro +@cindex @command{gawk} @subentry problemi di implementazione @subentry debug +@cindex risoluzione di problemi @subentry @command{gawk} +@cindex problemi @subentry risoluzione di @subentry @command{gawk} +@cindex problemi di implementazione @subentry @command{gawk} @subentry debug @xref{POSIX/GNU}, per un compendio delle estensioni GNU per il linguaggio e il programma @@ -44442,8 +44616,8 @@ La @ref{Distribuzione di Gawk} descrive come scaricare e installare le versioni ufficiali rilasciate di @command{gawk}. -@cindex @command{git}, programma di utilit@`a -@cindex programma di utilit@`a @command{git} +@cindex @command{git} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{git} Peraltro, se si intende modificare @command{gawk} e mettere a disposizione le modifiche, @`e preferibile lavorare sulla versione in via di sviluppo. Per far ci@`o @`e necessario accedere al deposito del codice sorgente di @command{gawk}. @@ -44478,9 +44652,9 @@ un'estensione Git per lavorare con depositi di sorgenti Git. @node Aggiungere codice @appendixsubsec Aggiungere nuove funzionalit@`a -@cindex @command{gawk}, aggiungere funzionalit@`a a -@cindex funzionalit@`a, aggiungere a @command{gawk} -@cindex aggiungere funzionalit@`a a @command{gawk} +@cindex @command{gawk} @subentry aggiungere funzionalit@`a a +@cindex funzionalit@`a @subentry aggiungere a @command{gawk} +@cindex aggiungere @subentry funzionalit@`a a @command{gawk} Ognuno @`e libero di aggiungere tutte le nuove funzionalit@`a che vuole a @command{gawk}. Comunque, se si desidera che tali modifiche siano incorporate nella distribuzione di @command{gawk}, ci sono parecchi passi da fare per @@ -44527,7 +44701,7 @@ di iniziare a modificare @command{gawk}. @uref{https://www.gnu.org/prep/standards/, Progetto GNU}. Sono disponibili anche versioni in formato Texinfo, Info, e DVI.) -@cindex @command{gawk}, stile di codifica in +@cindex @command{gawk} @subentry stile di codifica in @item Usare lo stile di codifica @command{gawk}. Il codice sorgente in C di @command{gawk} segue le istruzioni dello @@ -44631,8 +44805,8 @@ in formato @command{man}. Si dovr@`a anche firmare un documento liberatorio relativo alle modifiche apportate alla documentazione. -@cindex @command{git}, programma di utilit@`a -@cindex programma di utilit@`a @command{git} +@cindex @command{git} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{git} @item Inviare le modifiche come file di differenze nel formato contestuale unificato. Usare @samp{diff -u -r -N} per confrontare i sorgenti originali dell'albero @@ -44663,8 +44837,8 @@ troppo tempo, potrei anche lasciar perdere la modifica. @node Nuovi sistemi @appendixsubsec Portare @command{gawk} su un nuovo Sistema Operativo -@cindex portabilit@`a, @command{gawk} -@cindex sistemi operativi, portare @command{gawk} su altri +@cindex portabilit@`a @subentry @command{gawk} +@cindex sistemi operativi @subentry portare @command{gawk} su altri @cindex portare @command{gawk} Se si vuol portare @command{gawk} su di un nuovo sistema operativo, sono @@ -44748,7 +44922,7 @@ appropriati file @file{gawkmisc.???} da ogni sottodirectory. Anche quest'ultimo file va aggiornato. Ogni file @file{gawkmisc.???} del @dfn{port} ha un suffisso esplicativo -del tipo di macchina o del sistema operativo in questione---per esempio, +del tipo di macchina o del sistema operativo in questione --- per esempio, @file{pc/gawkmisc.pc} e @file{vms/gawkmisc.vms}. L'uso di suffissi distinti invece di un semplice @file{gawkmisc.c}, rende possibile spostare file da una sottodirectory propria del @dfn{port} nella sottodirectory principale, @@ -44785,7 +44959,7 @@ parentesi graffe di proprio gradimento. @node File derivati @appendixsubsec Perch@'e i file generati sono tenuti in Git -@cindex Git, uso per il codice sorgente di @command{gawk} +@cindex Git @subentry uso per il codice sorgente di @command{gawk} @c From emails written March 22, 2012, to the gawk developers list. Se si esaminano i sorgenti di @command{gawk} nel deposito Git @@ -45034,7 +45208,7 @@ Larry @end ignore @cindex Perl @cindex Wall, Larry -@cindex Robbins, Arnold +@cindex Robbins @subentry Arnold @quotation @i{AWK @`e un linguaggio simile a PERL, solo che @`e notevolmente pi@`u elegante.} @author Arnold Robbins @@ -45363,8 +45537,8 @@ ed @`e stato rimosso dal codice sorgente nella @node Concetti fondamentali @appendix Concetti fondamentali di programmazione -@cindex programmazione, concetti di -@cindex programmazione, concetti di +@cindex programmazione @subentry concetti di +@cindex programmazione @subentry concetti di Quest'@value{APPENDIX} si propone di definire alcuni dei concetti e termini fondamentali usati nel resto di questo @value{DOCUMENT}. @@ -45425,7 +45599,7 @@ sia un programma @dfn{interpretato}. In quest'ultimo caso, un programma direttamente eseguibile dal computer, come @command{awk}, legge il programma, e quindi usa le istruzioni in esso contenute per elaborare i dati. -@cindex programmazione, passi fondamentali +@cindex programmazione @subentry passi fondamentali Quando si scrive un programma, esso @`e composto normalmente dai seguenti insiemi di istruzioni di base, @ifnotdocbook @@ -45500,7 +45674,7 @@ avvolta in una pellicola trasparente per evitare che qualcuno la assaggi, e inoltre vanno lavati i contenitori e le posate. @end table -@cindex Algoritmi +@cindex algoritmi Un @dfn{algoritmo} @`e la descrizione dettagliata della procedura necessaria per svolgere un compito o per elaborare dati. Lo si pu@`o paragonare alla ricetta per preparare una torta. I programmi sono il modo con cui un @@ -45523,8 +45697,8 @@ sono riuniti sotto il nome di ``input/output'' e, ancor pi@`u spesso, con l'abbreviazione ``I/O''. (In inglese ``input'' e ``output'' sono spesso usati come verbi, nel gergo informatico, al posto di leggere e scrivere.) -@cindex guidato-dai-dati, linguaggio di programmazione -@cindex linguaggio di programmazione, guidato dai dati +@cindex guidati-dai-dati @subentry linguaggi di programmazione +@cindex linguaggi di programmazione @subentry guidati dai dati @command{awk} gestisce la lettura dei dati, come anche la divisione in record e campi. Lo scopo del programma dell'utente @`e di dire ad @command{awk} cosa fare con i dati. Questo vien fatto descrivendo @dfn{modelli} da @@ -45545,10 +45719,10 @@ designare il record in input corrente e i campi che compongono il record stesso. Si possono inoltre raggruppare molti valori associati tra di loro sotto un unico nome, utilizzando un vettore. -@cindex valori numerici -@cindex valori tipo stringa -@cindex valori scalari -@cindex scalari, valori +@cindex valori @subentry numerici +@cindex valori @subentry di tipo stringa +@cindex valori @subentry scalari +@cindex scalari @subentry valori I dati, in particolare in @command{awk}, possono avere valori numerici, come 42 o 3.1415927, o avere come valore delle stringhe. Un valore di tipo stringa @`e essenzialmente qualsiasi cosa che non sia un numero, per esempio un nome. Le @@ -45642,8 +45816,8 @@ ISO C del 1999. La situazione in cui due processi che comunicano tra loro sono entrambi bloccati, in attesa che l'altro processo faccia qualcosa. -@cindex Ada, linguaggio di programmazione -@cindex linguaggio di programmazione, Ada +@cindex Ada @subentry linguaggio di programmazione +@cindex linguaggi di programmazione @subentry Ada @item Ada Un linguaggio di programmazione originalmente definito dal Department of Defense U.S.A.@: per la programmazione integrata. @`E stato progettato per @@ -45709,9 +45883,10 @@ assegnati sono chiamati @dfn{rvalue}. @xref{Operatori di assegnamento}. @cindex Spencer, Henry -@cindex @command{sed}, programma di utilit@`a -@cindex programma di utilit@`a @command{sed} -@cindex incredibile assembler (@command{aaa}) scritto in @command{awk} +@cindex @command{sed} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{sed} +@cindex amazing @command{awk} assembler (programma @command{aaa}) +@cindex programma @subentry @command{aaa} (amazing @command{awk} assembler) @item Assembler incredibilmente scritto in @command{awk} Henry Spencer dell'Universit@`a di Toronto ha scritto un assembler adatto a molti diversi hardware, usando solo @dfn{script} @command{sed} e @@ -45823,7 +45998,7 @@ Doug Abbreviazione di ``Binary Digit'' [cifra binaria]. Tutti i valori nella memoria di un computer sono rappresentati nella forma di cifre binarie: valori che sono zero o uno. -Gruppi di bit possono essere interpretati differentemente---come numeri +Gruppi di bit possono essere interpretati differentemente --- come numeri interi, numeri in virgola mobile, dati di tipo carattere, indirizzi di altri oggetti contenuti in memoria, o altri dati ancora. @command{awk} permette di lavorare con numeri in virgola mobile e stringhe. @@ -45894,9 +46069,9 @@ la @ref{Separazione in base al contenuto}). @cindex ASCII -@cindex ISO 8859-1 -@cindex ISO Latin-1 -@cindex caratteri (codifiche macchina di caratteri) +@cindex ISO @subentry 8859-1 (codifica caratteri) +@cindex ISO @subentry Latin-1 (codifica caratteri) +@cindex caratteri @subentry (codifiche macchina di caratteri) @cindex insiemi di caratteri (codifiche macchina di caratteri) @cindex Unicode @item Caratteri @@ -45912,8 +46087,8 @@ nei sistemi GNU/Linux. @cindex Kernighan, Brian @cindex Bentley, Jon -@cindex @command{chem}, programma di utilit@`a -@cindex programma di utilit@`a @command{chem} +@cindex @command{chem} (programma di utilit@`a) +@cindex programma di utilit@`a @subentry @command{chem} @item CHEM Un preprocessore per @command{pic} che legge descrizioni di molecole e produce l'input a @command{pic} che serve a disegnarle. @@ -45988,7 +46163,7 @@ invece di produrre solo un valore. Espressioni di assegnamento, incremento e decremento, e invocazioni di funzioni hanno effetti collaterali. (@xref{Operatori di assegnamento}). -@cindex epoch, definizione di +@cindex epoch @subentry definizione di @item Epoca [Inizio del tempo in Unix] la data usata come ``inizio del tempo'' per i campi che contengono date. I valori del tempo nella maggior parte dei dei sistemi sono rappresentati @@ -46000,6 +46175,7 @@ L'Epoca nei sistemi Unix e POSIX parte dal primo gennaio 1970 alle ore Si veda anche ``GMT'' e ``UTC''. @item Esadecimale +@cindex ASCII Notazione per l'aritmetica in base 16, che usa le cifre @code{0}--@code{9} e le lettere @code{A}--@code{F}, con @samp{A} che rappresenta 10, @samp{B} che rappresenta 11, e cos@`{@dotless{i}} via, fino a @@ -46124,7 +46300,7 @@ Free Documentation License. Si veda ``Licenza Documentazione Libera''. @item File speciale Un @value{FN} interpretato internamente da @command{gawk}, invece che gestito direttamente dal sistema operativo in cui viene eseguito -@command{gawk}---per esempio, @file{/dev/stderr}. +@command{gawk} --- per esempio, @file{/dev/stderr}. (@xref{File speciali}). @item Flag [Indicatore] @@ -46139,7 +46315,7 @@ controllate dalle stringhe di formato contenute nelle variabili predefinite @code{CONVFMT} e @code{OFMT}. (@xref{Lettere di controllo}). @cindex formattatore incredibilmente duttile (@command{awf}) -@cindex programma @command{awf} (formattatore incredibilmente duttile) +@cindex programma @subentry @command{awf} (formattatore incredibilmente duttile) @item Formattatore incredibilmente duttile (@command{awf}) Henry Spencer all'Universit@`a di Toronto ha scritto un formattatore che accetta un ampio sottoassieme dei comandi di formattazione @samp{nroff -ms} @@ -46202,8 +46378,7 @@ in fase di esecuzione di progranna. L'implementazione GNU di @command{awk}. @cindex GPL (General Public License) -@cindex General Public License (GPL) -@cindex GNU General Public License +@cindex GNU @subentry General Public License @item General Public License Un documento che descrive le condizioni alle quali @command{gawk} e i suoi file sorgenti possono essere distribuiti. (@xref{Copia}). @@ -46216,7 +46391,7 @@ Si veda anche ``Epoca'' e ``UTC''. @cindex FSF (Free Software Foundation) @cindex Free Software Foundation (FSF) -@cindex Progetto GNU +@cindex progetto @subentry GNU @item GNU ``GNU's not Unix'' (GNU non @`e Unix). Un progetto della Free Software Foundation, ancora in corso, che mira a creare @@ -46307,13 +46482,13 @@ se una determinata condizione @`e verificata. Istruzioni di controllo sono: @code{if}, @code{for}, @code{while}, e @code{do} (@pxref{Istruzioni}). -@cindex Java, linguaggio di programmazione -@cindex linguaggio di programmazione, Java +@cindex Java @subentry linguaggio di programmazione +@cindex linguaggi di programmazione @subentry Java @item Java Un moderno linguaggio di programmazione originalmente sviluppato da Sun Microsystems (ora Oracle) che prevede la programmazione orientata agli oggetti. Sebbene normalmente sia implementato compilando le istruzioni -per una macchina virtuale standard (la JVM---Java Virtual Machine) il +per una macchina virtuale standard (la JVM --- Java Virtual Machine) il linguaggio pu@`o essere compilato per essere eseguito in maniera nativa. @item Korn Shell @@ -46328,7 +46503,7 @@ Si veda ``Licenza Documentazione Libera''. @cindex LGPL (Lesser General Public License) @cindex Lesser General Public License (LGPL) -@cindex GNU Lesser General Public License +@cindex GNU @subentry Lesser General Public License @item Lesser General Public License Questo documento descrive i termini nei quali possono essere distribuiti degli archivi contenenti librerie in formato eseguibile o oggetti condivisi, @@ -46597,10 +46772,9 @@ Si veda ``Stringa nulla''. Il carattere generato premendo il tasto @kbd{TAB} sulla tastiera. Normalmente pu@`o generare sino a otto spazi in output. -@cindex Linux @cindex GNU/Linux @cindex Unix -@cindex sistemi operativi basati su BSD +@cindex sistemi operativi @subentry basati su BSD @cindex NetBSD @cindex FreeBSD @cindex OpenBSD @@ -46699,7 +46873,7 @@ Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{https://fsf.org/ This is an unofficial translation of the GNU General Public License into Italian. It was not published by the Free Software Foundation, and does not -legally state the distribution terms for software that uses the GNU GPL---only +legally state the distribution terms for software that uses the GNU GPL --- only the original English text of the GNU GPL does that. However, we hope that this translation will help Italian speakers understand the GNU GPL better. @@ -47483,7 +47657,7 @@ leggi @url{https://www.gnu.org/philosophy/why-not-lgpl.html}. @cindex FDL (Free Documentation License) @cindex Free Documentation License (FDL) -@cindex GNU Free Documentation License +@cindex GNU @subentry Free Documentation License @c This file is intended to be included within another document, @c hence no sectioning command or @node. @@ -47494,7 +47668,7 @@ Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, In This is an unofficial translation of the GNU Free Documentation License into Italian. It was not published by the Free Software Foundation, and does not -legally state the distribution terms for software that uses the GNU FDL---only +legally state the distribution terms for software that uses the GNU FDL --- only the original English text of the GNU FDL does that. However, we hope that this translation will help Italian speakers understand the GNU FDL better. diff --git a/doc/it/sidebar.awk b/doc/it/sidebar.awk index d1f3efc3..4c0748e2 100644 --- a/doc/it/sidebar.awk +++ b/doc/it/sidebar.awk @@ -37,7 +37,7 @@ BEGIN { /^@end[ \t]+sidebar[ \t]*$/ { collecting = 0 - printf "@cindex sidebar, %s\n", title + printf "@cindex riquadro @subentry %s\n", title printf "@ifdocbook\n" printf "@docbook\n" printf "<sidebar><title>%s</title>\n", title diff --git a/doc/it/texinfo.tex b/doc/it/texinfo.tex index 78b23c1f..ca05be3f 100644 --- a/doc/it/texinfo.tex +++ b/doc/it/texinfo.tex @@ -5257,8 +5257,11 @@ end % The default definitions \def\sortas#1{}% \def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only -\def\putwordSeeAlso{See also} -\def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only +% for Italian +\def\putwordSeeAlso{Si veda anche} +\def\seeentry#1{\i{\putwordSiVeda}\ #1}% for sorted index file only +\def\putwordSiVeda{Si veda} +% end for Italian % Given index entry text like "aaa @subentry bbb @sortas{ZZZ}": |