Successivo: Separatori di output, Precedente: Print, Su: Stampare [Contenuti][Indice]
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
printf
semplicemente mettendo un ritorno a capo dopo una virgola qualsiasi (vedi la sezione Istruzioni e righe inawk
).
Successivo: Separatori di output, Precedente: Print, Su: Stampare [Contenuti][Indice]