|
|||||||
|
|
GAWKSection: Comandi di utilità (1)Updated: 19 dec 1996 Index Return to Main Contents NOMEgawk - linguaggio di ricerca ed elaborazione di configurazioni di testo (o pattern, come diremo d'ora in poi).SINTASSIgawk [ opzioni in stile POSIX o GNU ] -f file-di-programma [ -- ] file ...gawk [ opzioni in stile POSIX o GNU ] [ -- ] testo-del-programma file ... DESCRIZIONEGawk è la realizzazione dell'interprete del linguaggio AWK dello GNU Project. È conforme alla definizione del linguaggio prevista dallo standard "POSIX 1003.2 Command Language And Utilities". In particolare, questa versione è basata sulla descrizione contenuta in The AWK Programming Language, di Aho, Kernighan e Weinberger, con le prestazioni aggiuntive che si trovano nella versione di awk di UNIX System V Release 4. Gawk mette a disposizione inoltre le estensioni del più recente awk dei Bell Labs ed alcune funzionalità specifiche di GNU.La linea di comando consiste in opzioni di gawk stesso, il testo del programma AWK (a meno che non sia contenuto in un file indicato con l'opzione -f o --file), e valori che saranno resi disponibili al programma nelle variabili predefinite ARGC e ARGV. FORMATO DELLE OPZIONILe opzioni di Gawk possono essere sia nella tradizionale forma a una lettera di POSIX, sia nella forma estesa tipica di GNU. Le opzioni POSIX cominciano con un "-" singolo, quelle in forma lunga cominciano con "--". Sono disponibili opzioni in forma lunga sia per le prestazioni specifiche di GNU, sia per quelle previste da POSIX. Conformemente allo standard POSIX, le opzioni specifiche di gawk sono indicate come argomenti dell'opzione -W. Si possono indicare più opzioni -W. Ogni opzione -W ha un equivalente in forma lunga, come è spiegato più avanti. Gli argomenti delle opzioni in forma lunga possono essere uniti ad esse da un =, senza spazi, oppure sono indicati nel successivo campo della linea di comando. Gawk riconosce le seguenti opzioni.
In modalità compatibile, tutte le altre opzioni sono segnalate come illegali, e per il resto ignorate. Nell'uso normale le opzioni sconosciute sono passate al programma nel vettore ARGV per l'elaborazione, purché il testo del programma sia dato in qualche modo. Ciò è utile in particolare nel lancio del programma AWK tramite il meccanismo di esecuzione automatica dell'interprete, realizzato dalla sequenza "#!" all'inizio del file eseguibile. ESECUZIONE DEL PROGRAMMA AWKUn programma AWK consiste in una sequenza di istruzioni ("statement") del tipo "pattern-azione" ed, opzionalmente, definizioni di funzioni.
Gawk legge prima di tutto il programma sorgente da file-di-programma se specificato, dagli argomenti di --source, o dal primo argomento non di tipo opzione della linea di comando. Le opzioni -f e --source possono essere usate più volte nella linea di comando. Gawk leggerà il testo del programma come se tutti i file-di-programma e il testo sorgente della linea di comando fossero concatenati. Questo permette di realizzare librerie di funzioni AWK senza bisogno di includerle in ogni nuovo programma che le usi; inoltre si possono unire funzioni di libreria a programmi provenienti dalla linea di comando. La variabile di ambiente AWKPATH specifica il percorso lungo il quale cercare i file sorgenti indicati dall'opzione -f. Se questa variabile non esiste, è utilizzato il percorso ".:/usr/local/share/awk" (ma questo percorso può variare a seconda di come gawk sia stato compilato ed installato). Se un nome di file dato all'opzione -f contiene il carattere "/", non è eseguita alcuna ricerca tramite percorso. Gawk esegue i programmi nell'ordine seguente. Per prima cosa, realizza tutti gli assegnamenti indicati dall'opzione -v. Successivamente, converte i programmi in un formato interno. A questo punto esegue il codice dei blocchi BEGIN, se presenti, infine legge ciascun file indicato nel vettore ARGV. Se non ne è indicato alcuno, gawk legge da "standard input". Se un nome di file nella linea di comando ha la forma var=val, è trattato come un assegnamento di variabile. Alla variabile var sarà assegnato il valore val. Quest'azione, che ha luogo dopo che tutti i blocchi BEGIN sono stati eseguiti, è utilissima per agire dinamicamente sulle variabili che AWK usa per decidere come isolare i campi ed i record in ingresso. È utile inoltre per controllare variabili di stato quando siano necessari più passi di elaborazione su un singolo file di dati. Se il valore di un particolare elemento di ARGV è la stringa vuota (""), gawk lo salta. Per ogni record in ingresso, gawk controlla se soddisfi qualcuna delle configurazioni ("pattern"), specificate nel programma AWK. Per ogni pattern compatibile col record, è eseguita la corrispondente azione. I pattern sono controllati nell'ordine in cui appaiono nel programma. Infine, dopo che sono esauriti i dati in ingresso, gawk esegue il codice negli eventuali blocchi END. VARIABILI, RECORD E CAMPILe variabili di AWK sono dinamiche; iniziano ad esistere la prima volta che le si usa. I loro valori sono numeri in virgola mobile, o stringhe, o entrambe le cose, a seconda di come sono usati. Inoltre AWK dispone di vettori monodimensionali; i vettori multidimensionali possono essere simulati. Al lancio del programma sono impostate parecchie variabili predefinite; saranno descritte di volta in volta quando sarà necessario, ed elencate più avanti.RecordNormalmente i record sono separati dal carattere "newline". Si può controllare il modo in cui i record sono separati grazie alla variabile predefinita RS. Se RS contiene un qualsiasi carattere singolo, tale carattere separerà i record. Altrimenti, RS può essere un'espressione formale (regular expression): i record saranno separati della parte di testo in ingresso compatibile con l'espressione. Tuttavia, nella modalità compatibile (compatibility mode) è preso in considerazione solo il primo carattere della stringa come separatore. Se RS contiene la stringa nulla, i record sono separati da righe vuote. Quando RS contiene la stringa nulla, il carattere "newline" ha sempre la funzione di separatore di campo in aggiunta a quello indicato dalla variabile FS, qualunque sia.CampiOgni volta che gawk legge un record lo spezza in campi, usando il valore della variabile FS come separatore di campo. Se FS è un singolo carattere, i campi sono separati da quel carattere. Se FS è la stringa nulla, ogni singolo carattere del record diventa un diverso campo. Diversamente, si presume che FS sia un'espressione formale ("regular expression") completa. Nel caso particolare in cui FS è un singolo spazio, i campi sono separati da sequenze di spazi, "tab" o "newline" (ma si veda più avanti la discussione dell'opzione --posix). Si noti che il valore di IGNORECASE (vedi) influenza anche il modo in cui i campi sono spezzati quando FS è una regular expression, e come i record vengano separati quando RS è una regular expression. Se alla variabile FIELDWIDTHS è assegnata una lista di numeri separati da spazi, ogni campo è considerato di lunghezza fissa, e gawk spezza il record secondo le ampiezze specificate. Il valore di FS è ignorato. Assegnando un nuovo valore a FS, si annulla l'effetto di FIELDWIDTHS, e si ripristina il comportamento ordinario. Ogni campo nel record in ingresso può essere individuato dalla sua posizione : $1, $2, e così via. $0 è l'intero record. Nello stesso modo, si può anche assegnare un valore ad un campo. Non è necessario che i campi siano indicati da costanti:
stampa il quinto campo del record d'ingresso. La variabile NF contiene il numero di campi nel record corrente. Riferimenti a campi inesistenti (cioè campi oltre $NF) producono la stringa vuota. Tuttavia, l'assegnamento ad un campo inesistente (per esempio $(NF+2) = 5) provoca l'incremento del valore di NF, crea tutti i campi intermedi assegnando loro la stringa nulla, e fa sì che il valore di $0 sia ricalcolato utilizzando OFS per separare i campi. Riferimenti a campi con indice negativo producono un errore fatale. Il decremento di NF provoca la perdita dei campi di indice superiore al valore impostato, ed il ricalcolo di $0, utilizzando OFS per separare i campi. Variabili predefiniteLe variabili predefinite di gawk sono:
VettoriI vettori sono indicizzati da un'espressione tra parentesi quadre ([ e ]). Se l'espressione è formata da una lista di espressioni (expr, expr ...) l'indice del vettore è una stringa ottenuta concatenando i valori (stringa) di ogni espressione, sepati dal valore della variabile SUBSEP. Questa prestazione è sfruttata per simulare vettori multidimensionali. Per esempio:
assegna la stringa "hello, world\n" all'elemento del vettore x il cui indice è la stringa "A\034B\034C". In AWK, tutti i vettori sono associativi, cioè indicizzati da valori di tipo stringa. L'operatore in può essere usato in istruzioni if o while per sapere se un vettore preveda un certo valore come indice.
Se il vettore ha indici multipli, si usi (i, j) in array. Il costrutto in può anche essere usato in un ciclo for per iterare su tutti gli elementi di un vettore. Un elemento di un vettore può essere cancellato con l'istruzione delete. delete può anche essere usato per cancellare l'intero contenuto di un vettore, basta specificare il nome del vettore stesso senza indici. Tipi Di Variabili E ConversioniLe variabili e i campi possono essere numeri in virgola mobile, stringhe, o entrambe le cose. Come sia interpretato il valore di una variabile dipende dal contesto. In un'espressione numerica, sarà trattato come numero; usato come stringa, sarà trattato come tale. Per fare in modo che una variabile sia trattata come numero, le si sommi 0; per ottenere il trattamento come stringa, le si concateni la stringa nulla. Quando una stringa deve essere convertita a numero, la conversione è compiuta con atof(3). I numeri sono convertiti a stringhe usando sprintf(3) col valore di CONVFMT come stringa di formato ed il valore numerico della variabile come argomento. Tuttavia, anche se tutti i numeri in AWK sono in virgola mobile ("float"), i valori privi di decimali sono sempre convertiti come interi. Così, dati
la variabile b ha un valore di tipo stringa di "12" e non "12.00". Gawk esegue i confronti nel modo seguente: Se due variabili sono numeriche, sono confrontate numericamente. Se una è numerica e l'altra è una stringa interpretabile come numero, sono pure confrontate numericamente. Negli altri casi, gli eventuali valori numerici sono convertiti in stringhe, ed è eseguito un confronto tra stringhe. Secondo lo standard POSIX, il confronto numerico dovrebbe aversi anche quando entrambe le variabili fossero stringhe convertibili a numeri. Tuttavia, questo è chiaramente sbagliato, e gawk non lo fa. Si noti che le costanti stringa, come "57", non sono stringhe numeriche, ma solo costanti stringa. L'idea di "stringa numerica" si applica solo ai campi, all'ingresso di getline, a FILENAME, agli elementi di ARGV e di ENVIRON, ed agli elmenti di un vettore creato da split() che abbiano le caratteristiche di una stringa numerica. L'idea fondamentale è che debbano essere trattati in questo modo solo i dati forniti dall'utente (user input), e non altri. Le variabili non inizializzate hanno come valore numerico 0, e come valore di stringa "" (cioè la stringa vuota, o stringa nulla). PATTERN ED AZIONIAWK è un linguaggio orientato alla linea. Il pattern va all'inizio, l'azione a seguire. Le istruzioni dell'azione sono chiuse tra { e }. Sia il pattern che l'azione possono mancare ma, naturalmente, non entrabi. Se manca il pattern, l'azione è eseguita per ogni record in ingresso. Omettere invece l'azione equivale a specificare
che stampa l'intero record. I commenti cominciano col carattere "#", e continuano fino a fine riga. Si possono separare le istruzioni con righe vuote. Un'istruzione finisce normalmente con la fine della riga, a meno che non termini in ",", {, ?, :, &&, o ||. Le istruzioni in righe terminanti con do o else continuano automaticamente alla riga successiva. Negli altri casi, una riga terminante con un "\" continua alla successiva, e "newline" è ignorato. Si possono scrivere più istruzioni sulla stessa linea separandole con ";". Questo si applica sia alle istruzioni all'interno di un'azione (il caso più comune), sia ai gruppi pattern-azione stessi. PatternI pattern di AWK possono assume le forme seguenti:
BEGIN e END sono due tipi speciali di pattern, che non dipendono dai dati in ingresso. Le azioni di tutti i pattern BEGIN sono unite insieme, come se tutte le istruzioni fossero scritte in un unico blocco BEGIN, e sono eseguite prima che sia letto alcunché dall'igresso. Allo stesso modo, tutti i blocchi END sono fusi insieme, ed eseguiti dopo che tutti i dati in ingresso sono terminati o si è incontrata l'istruzione exit. BEGIN e END non possono essere combinati con altri pattern in espressioni, inoltre l'azione associata ad essi è obbligatoria. Per i pattern nella forma /regular expression/ l'azione associata è eseguita per ogni record in ingresso che sia conforme alla regular expression. Le "regular expression" hanno la stessa forma di quelle di egrep(1), e sono descritte più avanti. In un'espressione relazionale si può usare qualsiasi operatore definito nella sezione sulla azioni, più avanti. Generalmente l'espressione relazionale è utilizzata per verificare se certi campi si accordino con determinate regular expression. Gli operatori &&, ||, e ! sono rispettivamnete l'AND logico, l'OR logico, ed il NOT logico. Come i loro equivalenti del linguaggio C, valutano solo il numero di operandi strettamente necessario a decidere il risultato, a partire da quello più a sinistra ("short-circuit evaluation"). Sono usati per combinare espressioni di pattern più semplici. Come nella maggior parte dei linguaggi, si possono usare parentesi per cambiare l'ordine di valutazione. L'operatore ?: è simile allo stesso operatore del C: se il primo pattern è vero, allora il pattern utilizzato per il test è il secondo, altrimenti è il terzo. Dei pattern secondo e terzo, ne è valutato sempre solo uno. Un'espressione nella forma pattern1, pattern2 è detta range pattern. Essa considera compatibili tutti i record a partire da uno conforme a pattern1, fino ad uno conforme a pattern2, compreso. Non può essere combinata con alcun'altra espressione. Regular Expressions (Espressioni Formali)Le regular expression sono del tipo esteso che si trova in egrep. Sono composte da caratteri secondo le regole seguenti:
Le sequenze "\x" ("escape sequence") valide all'interno delle stringhe (vedere oltre) sono ammesse anche nelle regular expression. Le classi di caratteri sono una nuova prestazione introdotta nello standard POSIX. Una classe di caratteri è una speciale notazione per indicare liste di caratteri accomunati da uno specifico attributo, i costituenti delle quali possono variare a seconda della nazionalità e dell'insieme di caratteri di sistema (detto comunenmente character set o charset per brevità) correntemente attivi. Per esempio, la nozione di "carattere alfabetico" valida negli Stati Uniti è diversa da quella valida in Francia. Una classe di caratteri è ammessa solo all'interno delle parentesi quadre di una lista di caratteri di una regular expression. Le classi di caratteri si rappresentano con [:, una parola chiave indicante la classe, e :]. Queste sono le classi di caratteri definite dallo standard POSIX:
Per fare un esempio, prima dell'introduzione dello standard POSIX si sarebbe dovuto scrivere /[A-Za-z0-9]/ per individuare caratteri alfanumerici. Qualora il "character set" vigente avesse compreso altri caratteri alfanumerici, l'espressione non li avrebbe riconosciuti. Con le classi di caratteri POSIX, si può scrivere /[[:alnum:]]/, che troverà corrispondenza con tutti i caratteri alfabetici e numerici previsti dal charset correntemente in uso. Nelle liste di caratteri possono comparire due sequenze speciali aggiuntive. Esse si applicano ai charset non ASCII, i quali possono comprendere sia simboli singoli, chiamati "elementi di confronto testuale" (collating elements) rappresentati da più di un carattere, sia gruppi di caratteri tra loro equivalenti ai fini del confronto testuale (collating) o dell'ordinamento. Per esempio, in francese una "e" semplice ed una con l'accento grave sono equivalenti.
Queste funzionalità sono molto apprezzabili quando la lingua corrente non è l'inglese. Le funzioni di libreria che gawk usa nella valutazione di regular exopression riconoscono attualmente solo le classi di caratteri POSIX, non i simboli di confronto testuale né le classi di equivalenza. Gli operatori \y, \B, \<, \>, \w, \W, è, ed \' sono specificità di gawk; queste estensioni sono possibili grazie alle facilitazioni derivanti dall'uso della libreria "regexp" di GNU. Quelle che seguono sono le opzioni della linea di comando che controllano come gawk interpreti i caratteri nella regular expression.
AzioniLe istruzioni di azione sono rinchiuse tra graffe, { e }. Le istruzioni del costrutto di azione possono essere assegnamenti o istruzioni condizionali o iterative come si trovano nella maggior parte dei linguaggi. Gli operatori, le strutture di controllo e le istruzioni di input/output ricalcano le corrispondenti del linguaggio C.OperatoriGli operatori di AWK, in ordine decrescente di precedenza, sono
Istruzioni di controlloLe istruzioni di controllo di AWK sono:
Istruzioni di I/OLe istruzioni di input/output sono le seguenti:
Sono permessi anche altri tipi di redirezione. Per print e printf, >>file accoda i caratteri prodotti a file, metre | command scrive su una pipe. Allo stesso modo, command | getline legge da una pipe l'uscita di "command". L'istruzione getline restituirà 0 in caso di fine file, e -1 in caso di errore. L'istruzione printfLe versioni di AWK dell'istruzione printf e della funzione sprintf() (vedi più avanti) accettano i seguenti formati di conversione:
Tra % e la lettera di controllo possono comparire alcuni parametri opzionali:
È permessa la definizione dinamica di ampiezza e prec prevista dalla funzione printf() dell'ANSI C. Un * al posto di ampiezza o prec farà sì che i loro valori siano presi dalla lista degli argomenti di printf o sprintf(). Nomi di file specialiNelle redirezioni di print o printf in un file, o di getline da un file, gawk riconosce internamente certi nomi di file speciali, che permettono di accedere a file descriptor ereditati dal processo genitore di gawk (la shell, in genere), oppure ad informazioni riguardanti il processo gawk corrente. I nomi speciali sono:
Questi ultimi sono utili in particolare nell'emissione di messaggi. Per esempio, si può scrivere:
laddove, per ottenere lo stesso effetto, si sarebbe stati costretti a scrivere
Questi nomi di file possono essere anche dati nella linea di comando come nomi di file di dati. Funzioni NumericheAWK ha le seguenti funzioni aritmetiche predefinite:
Funzioni su StringheGawk offre le seguenti funzioni di stringa predefinite:
Funzioni di TempoPoiché uno dei principali campi di applicazione dei programmi AWK è l'elaborazione di file di traccia ("log files") contenenti informazioni di tipo marcatempo ("time stamp"), gawk mette a disposizione le seguenti due funzioni per ottenere marcatori di tempo e per manipolarli.
Constanti di tipo StringaLe costanti di tipo stringa in AWK sono sequenze di caratteri chiuse tra doppi apici ("). All'interno delle stringhe, sono riconosciute certe sequenze di escape (escape sequences), come nel linguaggio C :
Le sequenze di escape possono anche essere utilizzate all'interno di regular expression (per esempio, /[ \t\f\n\r\v]/ descrive i caratteri di spaziatura). In modalità compatibile i caratteri rappresentati da sequenze ottali ed esadecimali sono trattati letteralmente quando usati in costanti contenenti regular expression. Così, /a\52b/ equivale a /a\*b/. FUNZIONILe funzioni in AWK sono definite in questo modo:
Le funzioni sono eseguite in seguito a chiamate dall'interno di espressioni, che possono comparire sia all'interno di pattern, sia all'interno di azioni. I parametri attuali dati al momento della chiamata istanziano i parametri formali dichiarati nella funzione. I vettori sono passati per riferimento, le altre variabili per valore. Poiché le funzioni non erano in origine previste nel linguaggio AWK, la gestione delle variabili locali è piuttosto goffa: sono dichiarate semplicemente come parametri in più nella lista dei parametri formali. Per convenzione, si usa separare le variabili locali dai veri parametri con qualche spazio in più nella lista. Per esempio:
La parentesi di sinistra di una chiamata deve seguire immediatamente il nome della funzione, senza spazi in mezzo; questo per evitare l'ambiguità sintattica con l'operatore di concatenazione. Questa restrizione non si applica alle funzioni predefinite elencate prima. Le funzioni possono chiamare a loro volta altre funzioni, e possono essere ricorsive. I parametri utilizzati come variabili locali sono inizializzati alla stringa nulla ed al numero zero al momento dell'invocazione. Se è stata data l'opzione --lint, gawk avvertirà in caso di chiamate a funzioni indefinite al momento della valutazione sintattica del programma anziché durante l'esecuzione. La chiamata di una funzione indefinita in fase di esecuzione è un errore fatale. Si può usare la parola func al posto di function. ESEMPI
Stampa ed ordina i nomi di login di tutti gli utenti:
BEGIN { FS = ":" }
{ print $1 | "sort" }
Conta le righe di un file:
{ nlines++ }
END { print nlines }
Aggiunge il numero di linea alle righe di un file:
{ print FNR, $0 }
Variazione sul tema:
{ print NR, $0 }
VEDERE ANCHEegrep(1), getpid(2), getppid(2), getpgrp(2), getuid(2), geteuid(2), getgid(2), getegid(2), getgroups(2)The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X. AWK Language Programming, Edition 1.0, pubblicata da Free Software Foundation, 1995. COMPATIBILITÀ POSIXUn obiettivo di primaria importanza per gawk è la compatibilità con lo standard POSIX, così come con la più recente versione di awk per UNIX. A tal fine, gawk incorpora le seguenti prestazioni non descritte nel manuale del linguaggio, ma facenti parte della versione dei Bell Labs di awk, e previste dallo standard POSIX.L'opzione -v per l'assegnamento di variabili prima dell'esecuzione del programma è una novità. Secondo il libro, l'assegnamento di variabili da linea di comando ha luogo nel momento in cui awk utilizza l'argomento come eventuale nome di file da aprire in lettura, la qual cosa avviene dopo che sono stati eseguiti tutti i blocchi BEGIN. Tuttavia, nelle versioni più recenti, gli assegnamenti avvengono prima dell'esecuzione di BEGIN, a patto che precedano tutti i nomi di file nella linea di comando. Le applicazioni hanno finito col dipendere da questa "prestazione". Quando awk fu modificato per allinearlo con la sua documentazione, fu aggiunta quest'opzione per venire incontro alle applicazioni che confidavano nel vecchio comportamento. (questa funzionalità è stata accolta sia dagli sviluppatori di AT&T, sia da quelli di GNU). L'opzione -W per l'attivazione di prestazioni specifiche della versione proviene dallo standard POSIX. Nell'esame degli argomenti, gawk interpreta l'opzione speciale "--" come marcatore della fine della lista. In modalità compatibile segnala, ma per il resto ignora, le opzioni indefinite. Nella modalità ordinaria, tali argomenti sono passati al programma AWK perché possa elaborarli. Il manuale di AWK non definisce il valore di ritorno di srand(). Lo standard POSIX prevede che la funzione restituisca il seme corrente, per poter controllare la sequenza di generazione dei numeri casuali. Perciò, anche srand() di gawk restituisce il seme corrente. Nuove prestazioni sono anche le seguenti: l'uso di più di un'opzione -f (da MKS awk); il vettore ENVIRON; le escape sequence \a, e \v (originali di gawk ma aggiunte in seguito anche da AT&T); le funzioni predefinite tolower() e toupper() (da AT&T); e le specifiche di conversione del C ANSI per printf (da AT&T). ESTENSIONI GNUGawk aggiunge alcune estensioni a POSIX awk, descritte in questa sezione. Tutte le estensioni qui documentate possono essere disabilitate con l'opzione --traditional.Le seguenti funzionalità di gawk non sono disponibili in POSIX awk.
Il manuale di AWK non definisce il valore di ritorno di close(). Per Gawk, close() restituisce il valore di fclose(3), per la chiusura di file ordinari, o pclose(3), per la chiusura di pipe. Quando gawk è lanciato con l'opzione --traditional, e l'argomento fs dell'opzione -F è "t", ad FS è assegnato il carattere "tab". Si noti che se si digita gawk -F\t ... si ottiene solo di forzare la shell a considerare "t" alla lettera, e non di passare "\t" all'opzione -F. Poiché si tratta di un caso particolare abbastanza brutto, questo comportamento non ha luogo nella modalità ordinaria, e neppure quando si specifichi --posix. Il modo migliore per definire davvero un carattere "tab" come separatore di campo è usare gli apici: gawk -F'\t' .... PRESTAZIONI STORICHEGawk supporta due prestazioni caratteristiche delle prime realizzazioni di AWK. La prima è la possibilità di chiamare la funzione predefinita length() non solo senza argomenti, ma anche senza parentesi ! Così
equivale a
Questa prestazione è segnalata come "deprecabile" nello standard POSIX, e gawk emette un messaggio di avvertimento riguardo il suo uso se è specificata l'opzione --lint. La seconda prestazione "storica" è l'uso delle istruzioni continue e break fuori dal corpo di cicli while, for, o do. Le versioni tradizionali di AWK consideravano tali costrutti equivalenti all'istruzione next. Gawk permette questa sintassi se è specificato --traditional. VARIABILI D'AMBIENTESe esiste la variabile d'ambiente POSIXLY_CORRECT, gawk si comporterà esattamente come se fosse stato specificato --posix nella linea di comando. Se è specificato --lint, gawk emetterà un messaggio di avvertimento consono.Si può utilizzare la variabile di ambiente AWKPATH per indicare una lista di directory dove gawk cercherà i file indicati dalle opzioni -f e --file. BACHIL'opzione -F non è necessaria, dato che è possibile l'assegnamento a variabili qualsiasi da linea di comando; rimane solo per compatibilità all'indietro.Se il sistema operativo fornisce un supporto per /dev/fd ed i file associati /dev/stdin, /dev/stdout, e /dev/stderr, gawk può produrre dati in uscita diversi da quelli che si avrebbero su sistemi privi di tale supporto. Quando gawk interpreta quei file internamente, sincronizza la scrittura sullo standard output con la scrittura su /dev/stdout, mentre su di un sistema che riconosca quei file, la scrittura è attualmente diretta verso file descriptor diversi. "Caveat emptor". I programmi contenenti singoli caratteri sintatticamente errati tendono a riempire lo stack dell'analizzatore grammaticale, generando un messaggio di scarsa utilità. Programmi di questo genere sono sorprendentemente difficili da diagnosticare nel caso generale, e lo sforzo per farlo non vale davvero il risultato. INFORMAZIONI SULLA VERSIONEQuesto manuale documenta gawk, versione 3.02.AUTORILa versione originale di awk per UNIX è stata progettata e realizzata da Alfred Aho, Peter Weinberger, e Brian Kernighan degli AT&T Bell Labs. Brian Kernighan ne continua la manutenzione ed il miglioramento.Paul Rubin e Jay Fenlason, della Free Software Foundation, hanno scritto gawk facendo riferimeto per compatibilità alla versione originale di awk distribuita con Seventh Edition UNIX. John Woods ha contribuito correggendo un buon numero di errori. David Trueman, col contributo di Arnold Robbins, ha reso gawk compatibile con la nuova versione di UNIX awk. Arnold Robbins è l'attuale manutentore. Il trasporto su DOS è stato fatto inizialmente da Conrad Kwok e Scott Garfinkle. Scott Deifik è l'attuale responsabile della versione per DOS. Pat Rankin ha curato il trasporto su VMS, e Michal Jaegermann quello su Atari ST. Il trasporto su OS/2 è stato realizzato da Kai Uwe Rommel, con l'aiuto di Darrel Hankerson. Fred Fish ha prodotto la versione per Amiga. Documentazione tradotta da Giuseppe Guerrini (giusguerrini@racine.ra.it). SEGNALAZIONE DEI BACHIChi trovasse bachi in gawk, può segnalarli per posta elettronica a bug-gnu-util@prep.ai.mit.edu, con "carbon copy" a arnold@gnu.ai.mit.edu. Si prega di specificare il tipo e la versione del proprio sistema operativo, la versione di gawk, il compilatore utilizzato per compilarlo, ed un programma di prova completo di dati, il più corto possibile, che evidenzi il problema.Prima di inviare una segnalazione di baco, bisogna fare due cose. Innanzi tutto, verificare se si sta usando la versione più recente di gawk: ogni nuova distribuzione corregge molti bachi, in genere i più subdoli; se quella in uso non è aggiornata, è probabile che il problema sia già stato risolto. La seconda cosa da fare è leggere attentamente queste pagine ed il manuale di riferimento, per essere sicuri che ciò che si pensa un errore non sia piuttosto un cavillo del linguaggio. Si prega di NON inviare segnalazioni di bachi a comp.lang.awk. Benché gli sviluppatori di gawk frequentino occasionalmente questo newsgroup, inviare lì le segnalazioni di bachi non è affidabile. Invitiamo invece tutti ad utilizzare gli indirizzi di posta elettronica dati sopra. RINGRAZIAMENTIRingraziamo Brian Kernighan dei Bell Labs, che ha dato consideravole assistenza durante le fasi di test e debug.COPYING PERMISSIONS (PERMESSI DI COPIA/RISTAMPA)NOTA DEL TRADUTTORE: Il testo seguente è lasciato nella sua forma originale perché manca l'approvazione ufficiale della sua traduzione da parte di Free Software Foundation. In coda all'originale abbiamo aggiunto una versione in italiano, che però è da considerare informale e legalmente non valida. Il solo testo la cui presenza renda ridistribuibile il documento, e la cui assenza configuri una violazione della licenza, è quello in lingua inglese. Copyright © 1996 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual page provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual page under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual page into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation. PERMESSI DI COPIA/RISTAMPA [Traduzione non ufficiale, N.d.T.]Copyright © 1996 Free Software Foundation, Inc. Proprietà letteraria della Free Software Foundation, 1996.È permesso stampare e distribure copie letterali di questa pagina del manuale, a patto che la nota di proprietà letteraria e questa parte sui permessi di ristampa siano preservate in tutte le copie. È permesso copiare e distribuire versioni modificate di questa pagina del manuale, sotto le condizioni poste per la copia letterale, a patto che l'intero lavoro derivato sia distribuito secondo permessi di ristampa identici a questi. È permesso copiare e distribuire traduzioni di questa pagina del manuale in un'altra lingua, sotto le condizioni poste sopra per le versioni modificate, salvo che quest'informazione sui permessi di copia e ristampa deve essere espressa in una traduzione approvata dalla Free Software Foundation.
Index
| ||||||
|
|
|
Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account Document on this page is part of "Linuxinfor Man Pages in HTML Format: man1". See Index Page for more info about Authorship and Copyright. 1999-2008 Linuxinfor.com. No rights reserved. |