[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] gawk branch, feature/docit, updated. gawk-4.1.0-4151-g0270b73
From: |
Antonio Giovanni Colombo |
Subject: |
[SCM] gawk branch, feature/docit, updated. gawk-4.1.0-4151-g0270b73 |
Date: |
Wed, 14 Oct 2020 05:36:11 -0400 (EDT) |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".
The branch, feature/docit has been updated
via 0270b7371c388523de409175f552aa8d25442c85 (commit)
from ff37e5d04d28f5d9cd3125ff81487ccfe159a9f4 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=0270b7371c388523de409175f552aa8d25442c85
commit 0270b7371c388523de409175f552aa8d25442c85
Author: Antonio Giovanni Colombo <azc100@gmail.com>
Date: Wed Oct 14 11:35:21 2020 +0200
Modified gawktexi.in for the test programs and for updates to the book
diff --git a/doc/it/ChangeLog b/doc/it/ChangeLog
index 817cab5..b271b49 100644
--- a/doc/it/ChangeLog
+++ b/doc/it/ChangeLog
@@ -1,3 +1,8 @@
+2020-10-14 Antonio Giovanni Colombo <azc100@gmail.com>
+
+ * gawktexi.in: Updated.
+ * all test scripts should now work
+
2020-10-05 Antonio Giovanni Colombo <azc100@gmail.com>
* gawktexi.in: Updated.
diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in
index 7ad10e1..b3a6788 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 Agosto 2020
+@set UPDATE-MONTH Settembre 2020
@set VERSION 5.1
@set PATCHLEVEL 0
@@ -3464,6 +3464,40 @@ idea di quel che si vuole ottenere, ma occorre leggere
il resto del
Molti degli esempi usano un @value{DF} di nome @file{data}. Questo serve solo
a indicare la posizione del nome; se questi programmi devono venir usati per
se stessi, sostituire i propri @value{FNS} al posto di @file{data}.
+
+@cindex @command{ls} programma di utilit@`a
+@cindex programma di utilit@`a @subentry @command{ls}
+Alcuni degli esempi che seguono usano l'output di @w{@samp{ls -l}}
+come input.
+@command{ls} @`e un comando di sistema che elenca la lista dei file
+contenuti in una directory. Specificando l'opzione @option{-l},
+la lista include anche la dimensione e la data di ultima modifica
+di ogni file. Il suo output @`e simile a questo:
+
+@example
+-rw-r--r-- 1 arnold user 1933 Nov 7 13:05 Makefile
+-rw-r--r-- 1 arnold user 10809 Nov 7 13:03 awk.h
+-rw-r--r-- 1 arnold user 983 Apr 13 12:14 awk.tab.h
+-rw-r--r-- 1 arnold user 31869 Jun 15 12:20 awkgram.y
+-rw-r--r-- 1 arnold user 22414 Nov 7 13:03 awk1.c
+-rw-r--r-- 1 arnold user 37455 Nov 7 13:03 awk2.c
+-rw-r--r-- 1 arnold user 27511 Dec 9 13:07 awk3.c
+-rw-r--r-- 1 arnold user 7989 Nov 7 13:03 awk4.c
+@end example
+
+@noindent
+Il primo campo contiene le autorizzazioni di lettura-scrittura,
+il secondo campo contiene il numero di @dfn{link} di quel file
+[il numero di nomi con cui @`e conosciuto] e il terzo campo
+identifica il proprietario del file.
+Il quarto campo identifica il gruppo del file.
+Il quinto campo contiene la dimensione del file, in byte.
+Il sesto, settimo e ottavo campo contengono il mese, il giorno e
+l'ora, rispettivamente, in cui il file @`e stato modificato l'ultima
+volta. [Se la data di modifica @`e pi@`u di sei mesi nel passato,
+l'ottavo campo contiene l'anno, e non l'ora di modifica.]
+Finalmente il nono campo contiene il valore @value{FN}.
+
Per futura memoria, si noti che spesso c'@`e pi@`u di un modo per fare qualcosa
in @command{awk}. In un altro momento, si potrebbe tornare a guardare questi
esempi per vedere se si riescono a trovare modi differenti per fare le stesse
@@ -3647,34 +3681,24 @@ ls -l | awk '$6 == "Nov" @{ somma += $5 @}
END @{ print somma @}'
@end example
-@cindex comando @subentry @command{ls}
+@cindex @command{ls} programma di utilit@`a
+@cindex programma di utilit@`a @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
-fornisce un elenco dei file in una directory, con anche la dimensione di
-ogni file e la data di ultima modifica. Il suo output @`e del tipo:
-
-@example
--rw-r--r-- 1 arnold user 1933 Nov 7 13:05 Makefile
--rw-r--r-- 1 arnold user 10809 Nov 7 13:03 awk.h
--rw-r--r-- 1 arnold user 983 Apr 13 12:14 awk.tab.h
--rw-r--r-- 1 arnold user 31869 Jun 15 12:20 awkgram.y
--rw-r--r-- 1 arnold user 22414 Nov 7 13:03 awk1.c
--rw-r--r-- 1 arnold user 37455 Nov 7 13:03 awk2.c
--rw-r--r-- 1 arnold user 27511 Dec 9 13:07 awk3.c
--rw-r--r-- 1 arnold user 7989 Nov 7 13:03 awk4.c
-@end example
-
-@noindent
-@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.
-Il quarto campo identifica il gruppo a cui appartiene il file.
+anno).
+
+Come gi@`a visto sopra, l'output di @w{@samp{ls -l}} elenca la lista
+dei file contenuti in una directory, compresa la lunghezza di ogni
+file la data in cui il file @`e stato modificato per l'ultima volta.
+Il primo campo contiene le autorizzazioni di lettura-scrittura,
+il secondo campo contiene il numero di @dfn{link} di quel file
+e il terzo campo identifica il proprietario del file.
+Il quarto campo identifica il gruppo del file.
Il quinto campo contiene la dimensione del file, in byte.
-Il sesto, settimo e ottavo campo contengono il mese, il giorno e l'ora,
-rispettivamente, in cui il file @`e stato modificato. Infine, il nono campo
-contiene il @value{FN}.
+Il sesto, settimo e ottavo campo contengono il mese, il giorno e
+l'ora, rispettivamente, in cui il file @`e stato modificato l'ultima
+volta.
+Finalmente il nono campo contiene il valore @value{FN}.
@c @cindex automatic initialization
@cindex inizializzazione @subentry automatica
@@ -3768,7 +3792,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 @subentry @command{csh}
+@cindex comando di utilit@`a @subentry @command{csh}
+@cindex @command{csh} (comando di utilit@`a) @subentry continuazione di riga
+@cindex continuazione di riga @subentry con C shell
@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
@@ -4076,7 +4102,7 @@ argomento, la parola chiave @`e immediatamente seguita da
un segno di uguale
(@samp{=}) e dal valore dell'argomento, oppure la parola chiave e il valore
dell'argomento sono separati da spazio bianco (spazi o caratteri TAB).
Se un'opzione con un valore viene immessa pi@`u di una volta,
-l'ultimo valore @`e quello che conta.
+l'ultimo valore @`e (di solito) quello che conta.
@cindex POSIX @command{awk} @subentry opzioni estese GNU
Ogni opzione estesa di @command{gawk} ha una corrispondente opzione
@@ -7378,7 +7404,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 @subentry stringhe, memorizzazine di
+@cindex angolo buio @subentry stringhe, memorizzazione 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
@@ -21642,7 +21668,9 @@ Secondo lo standard POSIX, i parametri di funzione
non possono avere lo stesso nome di una delle speciali variabili predefinite
(@pxref{Variabili predefinite}), e un parametro di funzione non pu@`o avere
lo stesso nome di un'altra funzione.
-Non tutte le versioni di @command{awk} applicano queste limitazioni.
+@cindex angolo buio @subentry limitazioni nel nome dei parametri
+Non tutte le versioni di @command{awk} applicano
+queste limitazioni. @value{DARKCORNER}
@command{gawk} applica solo la prima di queste restrizioni.
Se viene specificata l'opzione @option{--posix} (@pxref{Opzioni}),
anche la seconda restrizione viene applicata.
@@ -22726,9 +22754,9 @@ Ecco una versione estesa del @value{DF}:
@example
@c file eg/data/class_data2
-Biologia_101 somma media ordina discendente dati: 87.0 92.4 78.5 94.9
-Chimica_305 somma media ordina discendente dati: 75.2 98.3 94.7 88.2
-Inglese_401 somma media ordina discendente dati: 100.0 95.6 87.1 93.4
+Biologia_101 somma media ascendente discendente dati: 87.0 92.4 78.5 94.9
+Chimica_305 somma media ascendente discendente dati: 75.2 98.3 94.7 88.2
+Inglese_401 somma media ascendente discendente dati: 100.0 95.6 87.1 93.4
@c endfile
@end example
@@ -23756,26 +23784,26 @@ con data e ora corrente formattata come nel programma
di utilit@`a @command{date
@c file eg/lib/gettime.awk
# Restituisce una stringa nel formato dell'output di date(1)
-# Riempie l'argomento del vettore time con valori individuali:
-# time["second"] -- secondi (0 - 59)
-# time["minute"] -- minuti (0 - 59)
-# time["hour"] -- ore (0 - 23)
-# time["althour"] -- ore (0 - 12)
-# time["monthday"] -- giorno del mese (1 - 31)
-# time["month"] -- mese dell'anno (1 - 12)
-# time["monthname"] -- nome del mese
-# time["shortmonth"] -- nome breve del mese
-# time["year"] -- anno modulo 100 (0 - 99)
-# time["fullyear"] -- anno completo
-# time["weekday"] -- giorno della settimana (domenica = 0)
-# time["altweekday"] -- giorno della settimana (luned@`{@dotless{i}} = 0)
-# time["dayname"] -- nome del giorno della settimana
-# time["shortdayname"] -- nome breve del giorno della settimana
-# time["yearday"] -- giorno dell'anno (0 - 365)
-# time["timezone"] -- abbreviazione del nome della zona di fuso orario
-# time["ampm"] -- designazione di AM o PM
-# time["weeknum"] -- numero della settimana, domenica primo giorno
-# time["altweeknum"] -- numero della settimana, luned@`{@dotless{i}}
primmo giorno
+# Riempie l'argomento del vettore ora con valori individuali:
+# ora["second"] -- secondi (0 - 59)
+# ora["minute"] -- minuti (0 - 59)
+# ora["hour"] -- ore (0 - 23)
+# ora["althour"] -- ore (0 - 12)
+# ora["monthday"] -- giorno del mese (1 - 31)
+# ora["month"] -- mese dell'anno (1 - 12)
+# ora["monthname"] -- nome del mese
+# ora["shortmonth"] -- nome breve del mese
+# ora["year"] -- anno modulo 100 (0 - 99)
+# ora["fullyear"] -- anno completo
+# ora["weekday"] -- giorno della settimana (domenica = 0)
+# ora["altweekday"] -- giorno della settimana (luned@`{@dotless{i}} = 0)
+# ora["dayname"] -- nome del giorno della settimana
+# ora["shortdayname"] -- nome breve del giorno della settimana
+# ora["yearday"] -- giorno dell'anno (0 - 365)
+# ora["timezone"] -- abbreviazione del nome della zona di fuso orario
+# ora["ampm"] -- designazione di AM o PM
+# ora["weeknum"] -- numero della settimana, domenica primo giorno
+# ora["altweeknum"] -- numero della settimana, luned@`{@dotless{i}}
primmo giorno
function getlocaltime(ora, ret, adesso, i)
@{
@@ -23793,25 +23821,25 @@ function getlocaltime(ora, ret, adesso, i)
# immette i valori, forzando i valori numerici
# a essere numerici aggiungendo uno 0
- time["second"] = strftime("%S", adesso) + 0
- time["minute"] = strftime("%M", adesso) + 0
- time["hour"] = strftime("%H", adesso) + 0
- time["althour"] = strftime("%I", adesso) + 0
- time["monthday"] = strftime("%d", adesso) + 0
- time["month"] = strftime("%m", adesso) + 0
- time["monthname"] = strftime("%B", adesso)
- time["shortmonth"] = strftime("%b", adesso)
- time["year"] = strftime("%y", adesso) + 0
- time["fullyear"] = strftime("%Y", adesso) + 0
- time["weekday"] = strftime("%w", adesso) + 0
- time["altweekday"] = strftime("%u", adesso) + 0
- time["dayname"] = strftime("%A", adesso)
- time["shortdayname"] = strftime("%a", adesso)
- time["yearday"] = strftime("%j", adesso) + 0
- time["timezone"] = strftime("%Z", adesso)
- time["ampm"] = strftime("%p", adesso)
- time["weeknum"] = strftime("%U", adesso) + 0
- time["altweeknum"] = strftime("%W", adesso) + 0
+ ora["second"] = strftime("%S", adesso) + 0
+ ora["minute"] = strftime("%M", adesso) + 0
+ ora["hour"] = strftime("%H", adesso) + 0
+ ora["althour"] = strftime("%I", adesso) + 0
+ ora["monthday"] = strftime("%d", adesso) + 0
+ ora["month"] = strftime("%m", adesso) + 0
+ ora["monthname"] = strftime("%B", adesso)
+ ora["shortmonth"] = strftime("%b", adesso)
+ ora["year"] = strftime("%y", adesso) + 0
+ ora["fullyear"] = strftime("%Y", adesso) + 0
+ ora["weekday"] = strftime("%w", adesso) + 0
+ ora["altweekday"] = strftime("%u", adesso) + 0
+ ora["dayname"] = strftime("%A", adesso)
+ ora["shortdayname"] = strftime("%a", adesso)
+ ora["yearday"] = strftime("%j", adesso) + 0
+ ora["timezone"] = strftime("%Z", adesso)
+ ora["ampm"] = strftime("%p", adesso)
+ ora["weeknum"] = strftime("%U", adesso) + 0
+ ora["altweeknum"] = strftime("%W", adesso) + 0
return ret
@}
@@ -24037,8 +24065,8 @@ comportamento desiderato. Ci ha fornito anche il
codice per far questo.
Non @`e stato necessario aggiungere a @command{gawk} questi criteri di ricerca
speciali; il lavoro si pu@`o fare tranquillamente usando @command{awk}, come
illustrato nel seguente programma di libreria. @`E strutturato in modo da
-chiamare due funzioni fornite dall'utente, @code{a_inizio_file()} e
-@code{a_fine_file()}, all'inizio e alla fine di ogni @value{DF}. Oltre a
risolvere
+chiamare due funzioni fornite dall'utente, @code{beginfile()} e
+@code{endfile()}, all'inizio e alla fine di ogni @value{DF}. Oltre a risolvere
il problema in sole nove(!) righe di codice,
questa soluzione @`e @emph{portabile}; il
programma funziona con qualsiasi implementazione di @command{awk}:
@@ -24049,7 +24077,7 @@ programma funziona con qualsiasi implementazione di
@command{awk}:
# Dare all'utente un aggancio per il passaggio
# da un file in input a quello successivo
#
-# L'utente deve fornire le funzioni a_inizio_file() ed a_fine_file()
+# L'utente deve fornire le funzioni beginfile() ed endfile()
# ciascuna delle quali @`e invocata
# quando il file, rispettivamente,
# inizia e finisce.
@@ -24057,14 +24085,14 @@ programma funziona con qualsiasi implementazione di
@command{awk}:
@c # Arnold Robbins, arnold@@skeeve.com, Public Domain
@c # January 1992
-FILENAME != _nome_file_vecchio @{
- if (_nome_file_vecchio != "")
- a_fine_file(_nome_file_vecchio)
- _nome_file_vecchio = FILENAME
- a_inizio_file(FILENAME)
+FILENAME != _oldfilename_ && _filename_ != FILENAME @{
+ if (_oldfilename_ != "")
+ endfile(_oldfilename_)
+ _oldfilename_ = FILENAME
+ beginfile(FILENAME)
@}
-END @{ a_fine_file(FILENAME) @}
+END @{ endfile(FILENAME) @}
@end example
Questo file [transfile.awk] dev'essere caricato prima del programma
@@ -24073,30 +24101,30 @@ in modo che la regola ivi contenuta venga eseguita
per prima.
Questa regola dipende dalla variabile di @command{awk} @code{FILENAME}, che
cambia automaticamente per ogni nuovo @value{DF}. Il @value{FN} corrente viene
-salvato in una variabile privata, @code{_nome_file_vecchio}. Se
@code{FILENAME} non @`e
-uguale a @code{_nome_file_vecchio}, inizia l'elaborazioone di un nuovo
@value{DF} ed
-@`e necessario chiamare @code{a_fine_file()} per il vecchio file. Poich@'e
-@code{a_fine_file()} dovrebbe essere chiamato solo se un file @`e stato
elaborato, il
-programma esegue prima un controllo per assicurarsi che
@code{_nome_file_vecchio} non
+salvato in una variabile privata, @code{_oldfilename_}. Se @code{FILENAME}
non @`e
+uguale a @code{_oldfilename_}, inizia l'elaborazioone di un nuovo @value{DF} ed
+@`e necessario chiamare @code{endfile()} per il vecchio file. Poich@'e
+@code{endfile()} dovrebbe essere chiamato solo se un file @`e stato elaborato,
il
+programma esegue prima un controllo per assicurarsi che @code{_oldfilename_}
non
sia la stringa nulla. Il programma assegna poi il valore corrente di
-@value{FN} a @code{_nome_file_vecchio} e chiama @code{a_inizio_file()} per il
file.
-Poich@'e, come tutte le variabili di @command{awk}, @code{_nome_file_vecchio}
@`e
+@value{FN} a @code{_oldfilename_} e chiama @code{beginfile()} per il file.
+Poich@'e, come tutte le variabili di @command{awk}, @code{_oldfilename_} @`e
inizializzato alla stringa nulla, questa regola viene eseguita correttamente
anche per il primo @value{DF}.
Il programma contiene anche una regola @code{END} per completare l'elaborazione
per l'ultimo file. Poich@'e questa regola @code{END} viene prima di qualsiasi
regola @code{END} contenuta nel programma ``principale'',
-@code{a_fine_file()} viene
+@code{endfile()} viene
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()} @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()}
+@cindex @code{beginfile()} @subentry funzione definita dall'utente
+@cindex funzione definita dall'utente @subentry @code{beginfile()}
+@cindex @code{endfile()} @subentry funzione definita dall'utente
+@cindex funzione definita dall'utente @subentry @code{endfile()}
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
+@code{endfile()} e @code{beginfile()} non vengono eseguite alla fine del primo
passaggio e all'inizio del secondo passaggio.
La versione seguente risolve il problema:
@@ -24104,7 +24132,7 @@ La versione seguente risolve il problema:
@c file eg/lib/ftrans.awk
# ftrans.awk --- gestisce il passaggio da un file dati al successivo
#
-# L'utente deve fornire le funzioni a_inizio_file() ed a_fine_file()
+# L'utente deve fornire le funzioni beginfile() ed endfile()
@c endfile
@ignore
@c file eg/lib/ftrans.awk
@@ -24117,12 +24145,12 @@ La versione seguente risolve il problema:
FNR == 1 @{
if (_filename_ != "")
- a_fine_file(_filename_)
+ endfile(_filename_)
_filename_ = FILENAME
- a_inizio_file(FILENAME)
+ beginfile(FILENAME)
@}
-END @{ a_fine_file(_filename_) @}
+END @{ endfile(_filename_) @}
@c endfile
@end example
@@ -24135,8 +24163,8 @@ semplifichi la scrittura del programma principale.
@sidebar Allora perch@'e @command{gawk} ha @code{BEGINFILE} e @code{ENDFILE}?
-Ci si chieder@`a, probabilmente: perch@'e, se le funzioni
@code{a_inizio_file()} e
-@code{a_fine_file()} possono eseguire il compito, @command{gawk} prevede i
+Ci si chieder@`a, probabilmente: perch@'e, se le funzioni @code{beginfile()} e
+@code{endfile()} possono eseguire il compito, @command{gawk} prevede i
criteri di
ricerca @code{BEGINFILE} e @code{ENDFILE}?
@@ -24409,7 +24437,7 @@ function disable_assigns(argc, argv, i)
@}
BEGIN @{
- if (Disabilita_variabili)
+ if (No_command_assign)
disable_assigns(ARGC, ARGV)
@}
@c endfile
@@ -24418,7 +24446,7 @@ BEGIN @{
Il programma va poi eseguito in questo modo:
@example
-awk -v Disabilita_variabili=1 -f noassign.awk -f vostro_programma.awk *
+awk -v No_command_assign=1 -f noassign.awk -f vostro_programma.awk *
@end example
La funzione esegue un ciclo che esamina ogni argomento.
@@ -24426,10 +24454,10 @@ Antepone @samp{./} a
qualsiasi argomento che abbia la forma di un assegnamento
di variabile, trasformando cos@`{@dotless{i}} quell'argomento in un @value{FN}.
-L'uso di @code{Disabilita_variabili} consente di disabilitare assegnamenti di
+L'uso di @code{No_command_assign} consente di disabilitare assegnamenti di
variabile dati sulla riga di comando al momento dell'invocazione,
assegnando alla variabile un valore @dfn{vero}.
-Se non viene impostata la variabile @`e inizializzata a zero (cio@`e
+Se non viene impostata, la variabile @`e inizializzata a zero (cio@`e
@dfn{falso}), e gli argomenti sulla riga di comando
non vengono modificati.
@@ -25398,7 +25426,6 @@ piccolo programma in C che genera la lista dei gruppi
come suo output.
* December 2010, move to ANSI C definition for main().
*/
-/* Per OS/2, non fare nulla. */
#if HAVE_CONFIG_H
#include <config.h>
#endif
@@ -25426,9 +25453,7 @@ main(int argc, char **argv)
@c endfile
@ignore
@c file eg/lib/grcat.c
-#ifdef ZOS_USS
- printf("%s:%ld:", g->gr_name, (long) g->gr_gid);
-#else
+#ifdef HAVE_STRUCT_GROUP_GR_PASSWD
@c endfile
@end ignore
@c file eg/lib/grcat.c
@@ -26523,41 +26548,58 @@ da implementare con @command{gawk}; basta usare la
variabile predefinita
@c file eg/prog/egrep.awk
# Arnold Robbins, arnold@@skeeve.com, Public Domain
# May 1993
+# Revised September 2020
@c endfile
@end ignore
@c file eg/prog/egrep.awk
# Opzioni:
# -c conta le righe trovate
-# -s silenziosa: genera solo il codice di ritorno
-# -v inverte test, successo se @dfn{regexp} non presente
+# -e l'argomento @`e un'espressione regolare
# -i ignora maiuscolo/minuscolo
# -l stampa solo nomi file
-# -e espressione da ricercare
+# -n aggiungi numeri linea in output
+# -q quieto - usa solo il codice di ritorno
+# -s silenzioso - non stampa messaggi di errore
+# -v inverte test, successo se espression non trovata
+# -x l'intera linea deve corrispondere
#
-# Richiede la funzione getopt() e il programma di libreria
-# che gestisce il passaggio da un file dati al successivo
+# Richiede la funzione getopt()
+# Usa IGNORECASE, BEGINFILE ed ENDFILE
+# Chiamare immettendo: gawk -f egrep.awk -- opzioni ...
BEGIN @{
- while ((c = getopt(ARGC, ARGV, "ce:svil")) != -1) @{
+ while ((c = getopt(ARGC, ARGV, "ce:ilnqsvx")) != -1) @{
if (c == "c")
conta_e_basta++
- else if (c == "s")
- non_stampare++
- else if (c == "v")
- inverti_test++
+ else if (c == "e")
+ criterio_di_ricerca = Optarg
else if (c == "i")
IGNORECASE = 1
else if (c == "l")
solo_nomi_file++
- else if (c == "e")
- criterio_di_ricerca = Optarg
+ else if (c == "n")
+ numero_riga++
+ else if (c == "q")
+ non_stampare++
+ else if (c == "s")
+ non_stampare_errori++
+ else if (c == "v")
+ inverti_test++
+ else if (c == "x")
+ riga_intera++
else
sintassi()
@}
@c endfile
@end example
+@noindent
+Si noti il commento relativo alla chiamata del programma:
+Poich@'e parecchie opzioni possono essere sepcificate anche per
+@command{gawk}, occorre immettere @option{--} per far s@`@{dotless{i}} che
+@command{gawk} non prosegua nell'analisi delle opzioni.
+
Nel seguito c'@`e il codice che gestisce il comportamento specifico di
@command{egrep}. Se non @`e fornito esplicitamente alcun criterio di ricerca
tramite l'opzione @option{-e}, si usa il primo argomento sulla riga di
@@ -26574,80 +26616,65 @@ vengano scritti prima di ogni riga di output
corrispondente:
if (criterio_di_ricerca == "")
criterio_di_ricerca = ARGV[Optind++]
+ if (criterio_di_ricerca == "")
+ sintassi()
+
for (i = 1; i < Optind; i++)
ARGV[i] = ""
+
if (Optind >= ARGC) @{
ARGV[1] = "-"
ARGC = 2
@} else if (ARGC - Optind > 1)
- servono_nomi_file++
-
-# if (IGNORECASE)
-# criterio_di_ricerca = tolower(criterio_di_ricerca)
+ elabora_nomi_file++
@}
@c endfile
@end example
-Le ultime due righe sono solo dei commenti, in quanto non necessarie in
-@command{gawk}. Per altre versioni di
-@command{awk}, potrebbe essere necessario utilizzarle come istruzioni
-effettive (togliendo il "#").
+La regola @code{BEGINFILE} viene eseguita quando si inizia a
+elaborare un nuovo file. In questo caso, essa @`e piuttosto semplice;
+inizializza la variabile @code{contatore_file} a zero.
+@code{contatore_file} viene incrementata ogni volta che una riga
+nel file corrente corrisponde all'espressione di ricerca.
-Il prossimo insieme di righe dovrebbe essere decommentato
-se non si sta usando @command{gawk}.
-Questa regola converte in minuscolo tutti i caratteri della riga in input,
-se @`e stata specificata l'opzione @option{-i}.@footnote{Inoltre, qui si
-introduce un errore subdolo; se una corrispondenza viene trovata, viene
-inviata in output la riga tradotta, non quella originale.}
-La regola @`e
-commentata perch@'e non @`e necessaria se si usa @command{gawk}:
+Qui si implementa anche l'opzione @option{-s}.
+Si controlla se @code{ERRNO} @`e stato impostato,
+e se l'opzione @option{-s} era stata specificata.
+In tal caso, @`e necessario passare al file successivo
+[di solito, perch@'e questo file non @`e leggibile].
+Altrimenti @command{gawk} termina l'esecuzione
+con un messaggio di errore:
@example
@c file eg/prog/egrep.awk
-#@{
-# if (IGNORECASE)
-# $0 = tolower($0)
-#@}
-@c endfile
-@end example
-
-La funzione @code{a_inizio_file()} @`e chiamata dalla regola in
@file{ftrans.awk}
-quando ogni nuovo file viene elaborato. In questo caso, non c'@`e molto da
fare;
-ci si limita a inizializzare una variabile @code{contatore_file} a zero.
-@code{contatore_file} serve a ricordare quante righe nel file corrente
-corrispondono al criterio di ricerca.
-Scegliere come nome di parametro @code{da_buttare} indica che sappiamo che
-@code{a_inizio_file()} @`e chiamata con un parametro, ma che noi non siamo
-interessati al suo valore:
-
-@example
-@c file eg/prog/egrep.awk
-function a_inizio_file(da_buttare)
-@{
+BEGINFILE @{
contatore_file = 0
+ if (ERRNO && nessun_errore)
+ nextfile
@}
@c endfile
@end example
-La funzione @code{endfile()} viene chiamata dopo l'elaborazione di ogni file.
-Ha influenza sull'output solo quando l'utente desidera un contatore del
-numero di righe che sono state individuate. @code{non_stampare} @`e vero nel
-caso si desideri solo il codice di ritorno.
-@code{conta_e_basta} @`e vero se si desiderano solo i contatori
-delle righe trovate. @command{egrep}
-quindi stampa i contatori solo se
-sia la stampa che il conteggio delle righe sono stati abilitati.
-Il formato di output deve tenere conto del numero di file sui quali si
-opera. Per finire, @code{contatore_file} @`e aggiunto a @code{totale}, in
-modo da stabilire qual @`e il numero totale di righe che ha soddisfatto il
-criterio di ricerca:
+La regola @code{ENDFILE} viene eseguita alla fine dell'elaborazione
+di ogni file. Genera dell'output solo quando l'utente richiede un
+contatore del numero di righe che sono state trovate corrispondere.
+
+La variabile @code{non_stampare} @`e vera qualora si chieda di
+impostare solo il codice di ritorno.
+La variabile @code{conta_e_basta} @`e vera qualora si chieda solo
+il numero delle righe che sono state trovare corrispondere.
+@command{egrep} quindi stampa il contatore delle corrispondenze
+trovate solo se sia la stampa che il conteggio righe sono richieste.
+Il formato dell'output dev'essere adattato, a seconda del numero di
+file da elaborare. Infine @code{contatore_file} @`e aggiunto
+a @code{totale}, in modo da poter stabilire il numero totale di
+righe corrispondenti all'espressione cercata:
@example
@c file eg/prog/egrep.awk
-function endfile(file)
-@{
+ENDFILE @{
if (! non_stampare && conta_e_basta) @{
- if (servono_nomi_file)
+ if (elabora_nomi_file)
print file ":" contatore_file
else
print contatore_file
@@ -26660,18 +26687,18 @@ function endfile(file)
@c endfile
@end example
-Si potrebbero usare i criteri di ricerca speciali @code{BEGINFILE} ed
-@code{ENDFILE}
-(@pxref{BEGINFILE/ENDFILE}),
-ma in quel caso il programma funzionerebbe solo usando @command{gawk}.
-Inoltre, questo esempio @`e stato scritto prima che a @command{gawk} venissero
-aggiunti i criteri speciali @code{BEGINFILE} ed @code{ENDFILE}.
-
La regola seguente fa il grosso del lavoro per trovare righe corrispondenti
al criterio di ricerca fornito. La variabile
-@code{corrisponde} @`e vera se la riga @`e individuata dal criterio di ricerca.
-Se l'utente chiede invece le righe che non corrispondono, il senso di
-@code{corrisponde} @`e invertito, usando l'operatore @samp{!}.
+@code{corrisponde} @'e vera (diversa da zero) se la riga @'e individuata
+dal criterio di ricerca.
+Se l'utente ha specificato che la riga intera deve corrispondere
+(con l'opzione @option{-x}), il codice controlla la condizione
+verificando i valori delle variabili @code{RSTART} e @code{RLENGTH}.
+Se questi indicano che la corrispondenza non coincide con l'intera
+riga, la variabile @code{corrisponde} @`e impostata a zero (falsa).
+
+Se l'utente chiede invece le righe che @emph{non} corrispondono,
+il senso di @code{corrisponde} @`e invertito, usando l'operatore @samp{!}.
@code{contatore_file} @`e incrementato con il valore di
@code{corrisponde}, che vale uno o zero, a seconda che la corrispondenza sia
stata trovata oppure no. Se la riga non corrisponde, l'istruzione
@@ -26693,6 +26720,9 @@ dai due punti (@code{:}):
@c file eg/prog/egrep.awk
@{
corrisponde = ($0 ~ criterio_di_ricerca)
+ if (corrisponde && riga_intera && (RSTART != 1 || RLENGTH != length()))
+ corrisponde = 0
+
if (inverti_test)
corrisponde = ! corrisponde
@@ -26706,12 +26736,15 @@ dai due punti (@code{:}):
nextfile
if (solo_nomi_file) @{
- print nome_file
+ print FILENAME
nextfile
@}
- if (servono_nomi_file)
- print nome_file ":" $0
+ if (elabora_nomi_file)
+ if (numero_riga)
+ print FILENAME ":" FNR ":" $0
+ else
+ print FILENAME ":" $0
else
print
@}
@@ -26720,7 +26753,8 @@ dai due punti (@code{:}):
@end example
La regola @code{END} serve a produrre il codice di ritorno corretto. Se
-non ci sono corrispondenze, il codice di ritorno @`e uno; altrimenti, @`e zero:
+non ci sono corrispondenze, il codice di ritorno @`e uno;
+altrimenti, @`e zero:
@example
@c file eg/prog/egrep.awk
@@ -27074,7 +27108,7 @@ I campi in questi file sono separati da caratteri
@samp{:}:
@example
@c file eg/prog/id.awk
-function stampa_primo_campo(str, a)
+function ottieni_primo_campo(str, a)
@{
if (str != "") @{
split(str, a, ":")
@@ -27234,6 +27268,7 @@ funzione @code{sintassi()} che ne descrive le opzioni:
@c endfile
@end ignore
+@c file eg/prog/split.awk
function sintassi()
@{
print("Uso: split [-l contatore] [-a lunghezza-suffisso] [file
[nome-output-file]]") > "/dev/stderr"
@@ -27256,13 +27291,13 @@ BEGIN @{
Lunghezza_suffisso = 2
Contatore_righe = 1000
Contatore_byte = 0
- Output_file = "x"
+ Outfile = "x"
analizza_argomenti()
inizializza_suffisso()
- Output = (Output_file calcola_suffisso())
+ Output_file = (Outfile calcola_suffisso())
@}
@c endfile
@end example
@@ -27305,7 +27340,7 @@ function analizza_argomenti( i, c, l, modificatore)
# Controlla se il prefisso @`e differente
if (ARGV[Optind]) @{
- Output_file = ARGV[Optind]
+ Outfile = ARGV[Optind]
ARGV[Optind] = ""
if (++Optind < ARGC)
@@ -27455,19 +27490,19 @@ opzioni mutuamente esclusive, lo si fa semplicemente
usando due regole,
una per quando @code{Contatore_righe} @`e maggiore di zero, e l'altra
per quando @code{Contatore_byte} @`e maggiore di zero.
-La variabile @code{contorighe} conta quante righe sono state elaborate
+La variabile @code{righe_totali} conta quante righe sono state elaborate
finora. Quando il suo valore supera @code{Contatore_righe}, occorre
chiudere il file precedente e passare ad uno nuovo:
@example
@c file eg/prog/split.awk
Contatore_righe > 0 @{
- if (++contorighe > Contatore_righe) @{
- close(Output)
- Output = (Outfile calcola_suffisso())
- contorighe = 1
+ if (++righe_totali > Contatore_righe) @{
+ close(Output_file)
+ Output_file = (Outfile calcola_suffisso())
+ righe_totali = 1
@}
- print > Output
+ print > Output_file
@}
@c endfile
@end example
@@ -27485,25 +27520,25 @@ Il codice che segue fa esattamente tutto ci@`o:
@c file eg/prog/split.awk
Contatore_byte > 0 @{
# `+ 1' @`e per il carattere di fine riga che va aggiunto
- if (contorighe + length($0) + 1 > Contatore_byte) @{ # Supera il limite
+ if (righe_totali + length($0) + 1 > Contatore_byte) @{ # Supera il limite
# Calcola byte a inizio record
- byte_iniziali = Contatore_byte - contorighe
+ byte_iniziali = Contatore_byte - righe_totali
# Scrivi i byte iniziali
- printf("%s", substr($0, 1, byte_iniziali)) > Output
+ printf("%s", substr($0, 1, byte_iniziali)) > Output_file
# Chiudi il vecchio file, aprine uno nuovo
- close(Output)
- Output = (Outfile calcola_suffisso())
+ close(Output_file)
+ Output_file = (Outfile calcola_suffisso())
# Prepara i primi byte per il nuovo file
$0 = substr($0, byte_iniziali + 1) # Byte finali del record
- contorighe = 0
+ righe_totali = 0
@}
# Scrivi record intero o la parte finale restante
- contorighe += length($0) + 1
- print > Output
+ righe_totali += length($0) + 1
+ print > Output_file
@}
@c endfile
@end example
@@ -27514,7 +27549,7 @@ file in output:
@example
@c file eg/prog/split.awk
END @{
- close(Output)
+ close(Output_file)
@}
@c endfile
@end example
@@ -28136,13 +28171,13 @@ BEGIN @{
@c endfile
@end example
-La funzione @code{a_inizio_file()} @`e semplice; si limita ad azzerare i
contatori
+La funzione @code{beginfile()} @`e semplice; si limita ad azzerare i contatori
di righe, parole, caratteri e byte, e salva il valore corrente di @value{FN} in
@code{nome_file}:
@example
@c file eg/prog/wc.awk
-function a_inizio_file(file)
+function beginfile(file)
@{
righe = parole = caratteri = byte = 0
nome_file = FILENAME
@@ -28150,14 +28185,14 @@ function a_inizio_file(file)
@c endfile
@end example
-La funzione @code{a_fine_file()} aggiunge i numeri del file corrente al totale
+La funzione @code{endfile()} aggiunge i numeri del file corrente al totale
di righe, parole, e caratteri. Poi stampa i numeri relativi al file appena
letto. La funzione
-@code{a_inizio_file()} azzera i numeri relativi al @value{DF} seguente:
+@code{beginfile()} azzera i numeri relativi al @value{DF} seguente:
@example
@c file eg/prog/wc.awk
-function a_fine_file(file)
+function endfile(file)
@{
totale_righe += righe
totale_parole += parole
@@ -28389,6 +28424,7 @@ Ecco il programma:
# alarm.awk --- impostare una sveglia
#
# Richiede la funzione di libreria getlocaltime()
+# che si trova in gettime.awk
@c endfile
@ignore
@c file eg/prog/alarm.awk
@@ -28466,15 +28502,15 @@ prima di far scattare la sveglia:
# (p.es., impostare `alarm 5:30' alle 9 del mattino
# vuol dire far suonare la sveglia alle 5:30 pomeridiane)
# aggiungere 12 all'ora richiesta
- if (hour < 12 && adesso["hour"] > ora)
+ if (ora < 12 && adesso["hour"] > ora)
ora += 12
# imposta l'ora in secondi dalla mezzanotte
sveglia = (ora * 60 * 60) + (minuto * 60)
# ottieni l'ora corrente in secondi dalla mezzanotte
- corrente = (now["hour"] * 60 * 60) + \
- (now["minute"] * 60) + now["second"]
+ corrente = (adesso["hour"] * 60 * 60) + \
+ (adesso["minute"] * 60) + adesso["second"]
# quanto restare appisolati
sonno = sveglia - corrente
@@ -29276,6 +29312,26 @@ La riga @`e poi stampata nel file di output:
print riga > file_corrente
continue
@}
+ # gestisci istruzioni che convertono caratteri accentati
+ if (index(riga, "gsub(\"@@@@") > 0) @{
+ gsub("@@@{","@{",riga)
+ gsub("@@@}","@}",riga)
+ gsub("@@@@","@@",riga)
+ print riga > file_corrente
+ continue
+ @}
+ # istruzioni che convertono caratteri accentati
+ gsub("@@`a","Ã ",riga)
+ gsub("@@`e","è",riga)
+ gsub("@@'e","é",riga)
+ gsub("@@`@{@@dotless@{i@}@}","ì",riga)
+ gsub("@@`o","ò",riga)
+ gsub("@@`u","ù",riga)
+ # riga contiene ancora caratteri @@?
+ if (index(riga, "@@") == 0) {
+ print riga > file_corrente
+ continue
+ @}
n = split(riga, a, "@@")
# if a[1] == "", vuol dire riga che inizia per @@,
# non salvare un @@
@@ -29639,6 +29695,7 @@ Il programma @`e il seguente:
# Arnold Robbins, arnold@@skeeve.com, Public Domain
# July 1993
# December 2010, minor edits
+# Antonio Colombo, October 2020, test for Italian accented letters
@c endfile
@end ignore
@c file eg/prog/igawk.sh
@@ -30306,7 +30363,7 @@ programma seguendo questa indicazione.
@item
Perch@'e il programma @file{wc.awk} (@pxref{Programma wc}) non pu@`o
-limitarsi a usare il valore di @code{FNR} nella funziona @code{a_fine_file()}?
+limitarsi a usare il valore di @code{FNR} nella funzione @code{endfile()}?
Suggerimento: Esaminare il codice
@iftex
nella
@@ -32803,7 +32860,7 @@ $ @kbd{echo $LANGUAGE}
@end example
@noindent
-Il passo succesivo @`e creare le directory:
+Il passo successivo @`e creare le directory:
@example
$ @kbd{mkdir en_US.UTF-8 en_US.UTF-8/LC_MESSAGES}
-----------------------------------------------------------------------
Summary of changes:
doc/it/ChangeLog | 5 +
doc/it/gawktexi.in | 485 ++++++++++++++++++++++++++++++-----------------------
2 files changed, 276 insertions(+), 214 deletions(-)
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] gawk branch, feature/docit, updated. gawk-4.1.0-4151-g0270b73,
Antonio Giovanni Colombo <=