english version 1.3 italian version 1.0
Created attachment 70060 [details] l-awk1.xml
Quick remarks: lang="it" is missing (after link="..." inside <guide> at the beginning). Please s/Author/Autore/ at the beginning. Tabs are not allowed in our docs. Version & date elements *must* match the original's <version>1.1</version> <date>2005-07-15</date> *not* 2005-10-07 Thanks a lot for your contribution, keep 'em coming :)
Comment on attachment 70060 [details] l-awk1.xml ><?xml version='1.0' encoding="UTF-8"?> ><!-- $Header: /var/www/www.gentoo.org/raw_cvs/gentoo/xml/htdocs/doc/en/articles/l-awk1.xml,v 1.3 2005/09/10 21:20:16 rane Exp $ --> ><!DOCTYPE guide SYSTEM "/dtd/guide.dtd"> > ><guide lang="it" link="/doc/it/articles/l-awk1.xml"> ><title>Awk per esempi, Prima parte</title> > ><author title="Autore"> > <mail link="drobbins@gentoo.org">Daniel Robbins</mail> ></author> > ><author title="Traduttore"> > <mail link="luca.martini@gmail.com">Luca Martini</mail> ></author> > ><abstract> >Awk è un linguaggio molto carino e dal nome molto strano. In questo primo >articolo di una serie di tre, Daniel Robbins vi far
Comment on attachment 70060 [details] l-awk1.xml ><?xml version='1.0' encoding="UTF-8"?> ><!-- $Header: /var/www/www.gentoo.org/raw_cvs/gentoo/xml/htdocs/doc/en/articles/l-awk1.xml,v 1.3 2005/09/10 21:20:16 rane Exp $ --> ><!DOCTYPE guide SYSTEM "/dtd/guide.dtd"> > ><guide lang="it" link="/doc/it/articles/l-awk1.xml"> ><title>Awk per esempi, Prima parte</title> > ><author title="Autore"> > <mail link="drobbins@gentoo.org">Daniel Robbins</mail> ></author> > ><author title="Traduttore"> > <mail link="luca.martini@gmail.com">Luca Martini</mail> ></author> > ><abstract> >Awk è un linguaggio molto carino e dal nome molto strano. In questo primo >articolo di una serie di tre, Daniel Robbins vi farà velocemente prendere >confidenza con Awk. Nella successive puntate verranno affrontati argomenti >sempre più complessi, culminando nella presentazione di un'applicazione awk del >mondo reale. ></abstract> > ><!-- La versione originale di questo articolo è stata pubblicata da IBM >developerWorks ed è di proprietà di Westtech Information Services. Questo >documento è una versione aggiornata dell'articolo originale, e contiene >numerosi miglioramenti apportati dal Gentoo Linux Documentation team. --> > ><version>1.1</version> ><date>2005-10-07</date> > ><chapter> ><title>Un'introduzione ad un grande linguaggio dal nome bizzarro</title> ><section> ><title>In difesa di awk</title> ><body> > ><note> >La versione originale di questo articolo è stata pubblicata da IBM >developerWorks ed è di proprietà di Westtech Information Services. Questo >documento è una versione aggiornata dell'articolo originale, e contiene >numerosi miglioramenti apportati dal Gentoo Linux Documentation team. ></note> > ><p> >In questa serie di articoli vi trasformerò in abili programmatori awk. Lo devo >ammettere, awk non ha un nome molto carino o particolarmente alla moda, e il >nome della versione GNU di awk, chiamata gawk, suona francamente strano. Coloro >che non conoscono questo linguaggio, possono sentire il nome "awk" e pensare a >codice così ingarbugliato e antiquato da portare anche il più sapiente guru di >UNIX sull'orlo della follia (facendolo continuamente guaire "kill -9" mentre >corre verso la macchina del caffè). ></p> > ><p> >Di sicuro, awk non ha un gran nome. Ma è un grande linguaggio. Awk è orientato >al text processing e alla generazione di report, ma possiede anche >caratteristiche che permettono di programmare seriamente. E, a differenza di >altri linguaggi, la sintassi di awk è familiare, e prende in prestito alcune >delle migliori caratteristiche di linguaggi come il C, python, e bash (anche se, >tecnicamente, awk è stato creato prima di python e bash). Awk è uno di quei >linguaggi che, una volta imparati, diventeranno una delle migliori frecce al >vostro arco. ></p> > ></body> ></section> ><section> ><title>Il primo codice awk</title> ><body> > ><p> >Dovreste vedervi apparire di fronte ai vostri occhi il contenuto del vostro file ><path>/etc/passwd</path>. Ora, ecco una spiegazione di cosa ha fatto awk. Quando >abbiamo chiamato awk, abbiamo specificato come file di ingresso ><path>/etc/passwd</path>. Quando abbiamo eseguito awk, esso ha valutato il >comando print per ciascuna linea del file <path>/etc/passwd</path>, in >ordine. L'uscita è diretta allo standard output e otteniamo un risultato >identico a eseguire <c>cat /etc/passwd</c>. ></p> > ><p> >Ecco ora la spiegazione del blocco { print }. In awk, le parentesi graffe sono >usate per raggruppare blocchi di codice, come in C. All'interno del nostro >blocco di codice, abbiamo solamente il comando print. In awk, quando un comando >print appare da solo, l'intero contenuto della riga corrente viene stampato. ></p> > ><pre caption="Stampare la linea corrente"> >$ <i>awk '{ print $0 }' /etc/passwd</i> >$ <i>awk '{ print }' /etc/passwd</i> ></pre> > ><p> >In awk, la variabile $0 rappresenta la linea corrente per intero, quindi print e >print $0 fanno esattamente la stessa cosa. ></p> > ><pre caption="Riempire lo schermo con un po' di testo"> >$ <i>awk '{ print "hiya" }' /etc/passwd</i> ></pre> > ></body> ></section> ><section> ><title>Campi multipli</title> ><body> > ><pre caption="print $1"> >$ <i>awk -F":" '{ print $1 $3 }' /etc/passwd</i> >halt7 >operator11 >root0 >shutdown6 >sync5 >bin1 ><comment>....etc.</comment> ></pre> > ><pre caption="print $1 $3"> >$ <i>awk -F":" '{ print $1 " " $3 }' /etc/passwd</i> ></pre> > ><pre caption="$1$3"> >$ <i>awk -F":" '{ print "username: " $1 "\t\tuid:" $3 }' /etc/passwd</i> >username: halt uid:7 >username: operator uid:11 >username: root uid:0 >username: shutdown uid:6 >username: sync uid:5 >username: bin uid:1 ><comment>....etc.</comment> ></pre> > ></body> ></section> ><section> ><title>Script esterni</title> ><body> > ><pre caption="Script di esempio"> >BEGIN { FS=":" } >{ print $1 } ></pre> > ><p> >La differenza tra questi due metodi sta nel come settiamo il separatore di >campo. In questo script, il separatore di campo è specificato all'interno del >codice stesso (settando la variabile FS), mentre il nostro esempio precedente >settava FS passando l'opzione -F":" ad awk tramite la linea di comando. � >generalmente meglio settare il separatore di campo all'interno dello script >stesso., semplicemente perché in questo modo avete un comando in meno da >inserire sulla linea di comando. Parleremo della variabile FS più >dettagliatamente nel seguito di questo articolo.</p> > ></body> ></section> ><section> ><title>I blocchi BEGIN e END</title> ><body> > ><p> >Normalmente, awk esegue ciascun blocco del codice del vostro script una volta >per ogni riga del vostro file di input. Tuttavia, ci sono molti casi in cui >potreste aver bisogno di eseguire un codice di inizializzazione prima che awk >cominci a elaborare il testo contenuto nel file di ingresso. Nell'esempio >precedente abbiamo usato un blocco BEGIN. Poiché il blocco BEGIN viene valutato >prima che awk cominci a elaborare il file di ingresso, questo è un ottimo posto >per inizializzare la variabile FS (<e>field separator</e>, separatore di campo), >stampare un'intestazione, o inizializzare altre variabili globali che userete >più avanti nel programma. ></p> > ><p> >Awk fornisce anche un altro blocco speciale, chiamato il blocco END. Awk esegue >questo blocco dopo che tutte le righe del file di ingresso sono state >elaborate. Tipicamente, il blocco END è usato per realizzare calcoli finali o >per stampare dei riepiloghi che dovrebbero apparire alla fine del dati in >uscita. ></p> > ></body> ></section> ><section> ><title>Espressioni regolari e blocchi</title> ><body> > ><pre caption="Espressioni regolari e blocchi"> >/foo/ { print } >/[0-9]+\.[0-9]*/ { print } ></pre> > ></body> ></section> ><section> ><title>Espressioni e blocchi</title> ><body> > ><pre caption="fredprint"> >$1 == "fred" { print $3 } ></pre> > ><pre caption="root"> >$5 ~ /root/ { print $3 } ></pre> > ></body> ></section> ><section> ><title>Istruzioni condizionali</title> ><body> > ><pre caption="if"> >{ > if ( $5 ~ /root/ ) { > print $3 > } >} ></pre> > ><p> >Entrambi gli script funzionano in modo identico. Nel primo esempio, >l'espressione booleana è situata al di fuori del blocco, mentre nel secondo >esempio, il blocco è eseguito per ogni riga di input, e realizziamo >selettivamente il comando di print usando un'istruzione if. Entrambi i metodi >sono disponibili e potete scegliere quello che risulta più compatibile con le >altre parti del vostro script. ></p> > ><pre caption="if if"> >{ > if ( $1 == "foo" ) { > if ( $2 == "foo" ) { > print "uno" > } else { > print "one" > } > } else if ($1 == "bar" ) { > print "two" > } else { > print "three" > } >} ></pre> > ><pre caption="if"> >! /matchme/ { print $1 $3 $4 } ></pre> > ><pre caption="if"> >{ > if ( $0 !~ /matchme/ ) { > print $1 $3 $4 > } >} ></pre> > ><p> >Entrambi gli script mandano in uscita solo le righe che non contengono la >sequenza di caratteri matchme. Ancora una volta, potete scegliere il metodo che >funziona meglio col vostro codice. I due metodi fanno la stessa cosa. ></p> > ><pre caption="Stampare i campi uguali a foo e bar"> >( $1 == "foo" ) && ( $2 == "bar" ) { print } ></pre> > ><p> >Questo esempio stampa solo quelle righe in cui il primo campo è uguale a foo e >il secondo campo è uguale a bar. ></p> > ></body> ></section> ><section> ><title>Variabili numeriche!</title> ><body> > ><p> >Nel blocco BEGIN, inizializziamo la nostra variabile intera x a zero. Poi, ogni >volta che awk incontra una linea vuota, eseguirà l'istruzione x=x+1, >incrementando x. Quando tutte le righe sono state state elaborate, il blocco END >stamperà un riepilogo, specificando il numero di linee vuote incontrate. ></p> > ></body> ></section> ><section> ><title>Variabili stringa</title> ><body> > ><pre caption="Esempio di campo"> >2.01 ></pre> > ><pre caption="1.01x$( )1.01"> >{ print ($1^2)+1 } ></pre> > ><p> >Facendo un po' di esperimenti, vedrete che se una particolare variabile non >contiene un numero valido, awk tratterà tale variabile come uno zero numerico >ogni volta che dovrà valutarla come espressione matematica. ></p> > ></body> ></section> ><section> ><title>Un sacco di operatori</title> ><body> > ><p> >Un'altra cosa carina di awk è la sua dotazione di operatori >matematici. Oltre agli operatori standard per addizione, sottrazione, >moltiplicazione e divisione, awk ci permette di usare l'operatore di >esponenziazione "^" precedente mostrato, l'operatore di modulo (resto della >divisione intera) "%" e un sacco di altri utili operatori di assegnamento >mutuati dal C. ></p> > ><p> >Fra questi possiamo citare il pre- ed il post-incremento/decremento (i++, >--foo), gli operatori standard che combinano le principali operazioni >aritmetiche con l'assegnamento (a+=3, b*=2, c/=2.2, d-=6.2). Ma questo non è >tutto -- abbiamo anche i comodi operatori di modulo/esponente sempre combinati >con l'assegnamento( a^=2, b%=4 ). ></p> > ></body> ></section> ><section> ><title>Separatori di campo</title> ><body> > ><p> >Awk ha un suo proprio bagaglio di variabili speciali. Alcune di esse vi >permettono di mettere a punto il funzionamento di awk, mentre altre possono >essere lette per ricavare importanti informazioni sui dati in ingresso. Abbiamo >già menzionato una di queste variabili speciali, FS. Come ricordato >precedentemente questa variabile permette di definire la sequenza di caratteri >che awk si aspetta di trovare fra i campi. Quando usavamo ><path>/etc/passwd</path> come file di input, FS era settata a ":". Anche se in >questo caso un solo carattere (":") è bastato al nostro scopo, FS ci permette >ancora più flessibilità . ></p> > ><pre caption="Un altro separatore di campo"> >FS="\t+" ></pre> > ><p> >Sopra abbiamo usato il carattere speciale delle espressioni regolari "+", che >significa "uno o più occorrenze del carattere precedente". ></p> > ><pre caption="Settare FS al carattere di spaziatura"> >FS="[[:space:]+]" ></pre> > ><p> >Sebbene questo assegnamento funzioni, esso non è necessario. Perché? Perché, di >default, FS è settato ad un singolo carattere di spaziatura, che awk interpreta >come "uno o più spazi o tabulazioni." In questo esempio particolare, il valore >predefinito di FS era esattamente identico al valore che si voleva assegnare. ></p> > ><pre caption="Esempio di separatore di campo"> >FS="foo[0-9][0-9][0-9]" ></pre> > ></body> ></section> ><section> ><title>Numero di campi</title> ><body> > ><pre caption="Numero di campi"> >{ > if ( NF > 2 ) { > print $1 " " $2 ":" $3 > } >} ></pre> > ></body> ></section> ><section> ><title>Numero di record</title> ><body> > ><pre caption="Numero di record"> >{ > <comment>#salta l'intestazione</comment> > if ( NR > 10 ) { > print "ok, ora arriva il reale contenuto" > } >} ></pre> > ><p> >Awk fornisce altre variabili speciali che possono essere usate per vari >scopi. Parleremo di queste variabili negli articoli successivi. ></p> > ><p> >Siamo arrivati alla fine della nostra prima esplorazione di awk. Con il >proseguire degli articoli, vi dimostrerò funzionalità più avanzate di awk e >finiremo con un'applicazione awk presa dal mondo reale. Nel frattempo, se siete >desiderosi di saperne di più ,date un'occhiata alle risorse proposte di seguito. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Risorse</title> ><section> ><title>Link utili</title> ><body> > ><ul> > <li> > Leggi gli altri articoli di Daniel su developerWorks: Awk > per esempi <uri link="l-awk2.xml">Parte seconda</uri> e <uri > link="l-awk3.xml">Parte terza</uri>. > </li> > <li> > Se ti piacciono i buoni vecchi libri di una volta, <uri > link="http://www.oreilly.com/catalog/sed2/">sed & awk, 2nd Edition</uri> > delle edizioni O'Reilly, è una scelta perfetta. > </li> > <li> > Ricordatevi di dare un'occhiata alla <uri > link="http://www.faqs.org/faqs/computer-lang/awk/faq/">FAQ di > comp.lang.awk</uri>. Contiene un sacco di altri link a risorse su awk. > </li> > <li> > Il <uri link="http://sparky.rice.edu/~hartigan/awk.html">tutorial su > awk</uri> di Patrick Hartigan's è pieno di utili script. > </li> > <li> > <uri link="http://www.tasoft.com/tawk.html">Thompson's TAWK Compiler</uri> > compila script awk in veloci binari eseguibili. Ne sono disponibili versioni > per Windows, OS/2, DOS, e UNIX. > </li> > <li> > La <uri link="http://www.gnu.org/software/gawk/manual/gawk.html">GNU Awk > User's Guide</uri> è disponibile online. > </li> ></ul> > ></body> ></section> ></chapter> > ></guide>
in CVS tx