Successivo: , Precedente: , Su: Stampare   [Contenuti][Indice]


5.2 Esempi di istruzioni print

Ogni istruzione print produce almeno una riga in output. Comunque, non è limitata a una sola riga. Se il valore di un elemento è una stringa che contiene un ritorno a capo, il ritorno a capo è stampato insieme al resto della stringa. Una singola istruzione print può in questo modo generare un numero qualsiasi di righe.

Quel che segue è un esempio di stampa di una stringa che contiene al suo interno dei ritorni a capo (la ‘\n’ è una sequenza di protezione, che si usa per rappresentare il carattere di ritorno a capo; vedi la sezione Sequenze di protezione):

$ awk 'BEGIN { print "riga uno\nriga due\nriga tre" }'
-| riga uno
-| riga due
-| riga tre

Il prossimo esempio, eseguito sul file inventory-shipped, stampa i primi due campi di ogni record in input, separandoli con uno spazio:

$ awk '{ print $1, $2 }' inventory-shipped
-| Jan 13
-| Feb 15
-| Mar 15
…

Un errore frequente usando l’istruzione print è quello di tralasciare la virgola tra due elementi. Questo ha spesso come risultato la stampa di elementi attaccati tra loro, senza lo spazio di separazione. Il motivo per cui ciò accade è che la scrittura di due espressioni di stringa in awk ne indica la concatenazione. Qui si vede l’effetto dello stesso programma, senza le virgole:

$ awk '{ print $1 $2 }' inventory-shipped
-| Jan13
-| Feb15
-| Mar15
…

Per chi non conosce il file inventory-shipped nessuno dei due output di esempio risulta molto comprensibile. Una riga iniziale di intestazione li renderebbe più chiari. Aggiungiamo qualche intestazione alla nostra tabella dei mesi ($1) e dei contenitori verdi spediti ($2). Lo facciamo usando una regola BEGIN (vedi la sezione I criteri di ricerca speciali BEGIN ed END) in modo che le intestazioni siano stampate una volta sola:

awk 'BEGIN {  print "Mese  Contenitori"
              print "------ -----  --- --" }
           {  print $1, $2 }' inventory-shipped

Una volta eseguito, il programma stampa questo:

Mese  Contenitori
----- -----------
Jan 13
Feb 15
Mar 15
…

Il solo problema, in effetti, è che le intestazioni e i dati della tabella non sono allineati! Possiamo provvedere stampando alcuni spazi tra i due campi:

awk 'BEGIN {  print "Mese  Contenitori"
              print "------ -----  --- --" }
           { print $1, "     ", $2 }' inventory-shipped

Allineare le colonne in questo modo può diventare piuttosto complicato, quando ci sono parecchie colonne da tenere allineate. Contare gli spazi per due o tre colonne è semplice, ma oltre questo limite comincia a volerci molto tempo. Ecco perché è disponibile l’istruzione printf (vedi la sezione Usare l’istruzione printf per stampe sofisticate); una delle possibilità che offre è quella di allineare colonne di dati.

NOTA: Si può continuare su più righe sia l’istruzione print che l’istruzione printf semplicemente mettendo un ritorno a capo dopo una virgola qualsiasi (vedi la sezione Istruzioni e righe in awk).


Successivo: , Precedente: , Su: Stampare   [Contenuti][Indice]