Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 108366 - [it] translated en/articles/l-awk1.xml
Summary: [it] translated en/articles/l-awk1.xml
Status: RESOLVED FIXED
Alias: None
Product: [OLD] Docs-user
Classification: Unclassified
Component: Translated Documentation (show other bugs)
Hardware: All Linux
: High normal (vote)
Assignee: Stefano Pacella (RETIRED)
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-10-07 03:09 UTC by Luca Martini
Modified: 2005-10-07 12:29 UTC (History)
2 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
l-awk1.xml (l-awk1.xml,12.98 KB, text/plain)
2005-10-07 03:14 UTC, Luca Martini
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Luca Martini 2005-10-07 03:09:29 UTC
english version 1.3
italian version 1.0
Comment 1 Luca Martini 2005-10-07 03:14:05 UTC
Created attachment 70060 [details]
l-awk1.xml
Comment 2 Xavier Neys (RETIRED) gentoo-dev 2005-10-07 03:34:13 UTC
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 3 Luca Martini 2005-10-07 05:51:47 UTC
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 4 Luca Martini 2005-10-07 05:51:47 UTC
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" ) &amp;&amp; ( $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 &amp; 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>
Comment 5 Stefano Pacella (RETIRED) gentoo-dev 2005-10-07 12:29:06 UTC
in CVS tx