Precedente: Modificatori di formato, Su: Printf [Contenuti][Indice]
printf
Il seguente semplice esempio mostra
come usare printf
per preparare una tabella allineata:
awk '{ printf "%-10s %s\n", $1, $2 }' mail-list
Questo comando
stampa i nomi delle persone ($1
) nel file
mail-list come una stringa di 10 caratteri allineati a sinistra.
Stampa anche i numeri telefonici ($2
) a fianco, sulla stessa riga.
Il risultato è una tabella allineata, contenente due colonne, di nomi e numeri
telefonici, come si può vedere qui:
$ awk '{ printf "%-10s %s\n", $1, $2 }' mail-list -| Amelia 555-5553 -| Anthony 555-3412 -| Becky 555-7685 -| Bill 555-1675 -| Broderick 555-0542 -| Camilla 555-2912 -| Fabius 555-1234 -| Julie 555-6699 -| Martin 555-6480 -| Samuel 555-3430 -| Jean-Paul 555-2127
In questo caso, i numeri telefonici debbono essere stampati come stringhe, poiché includono un trattino. Una stampa dei numeri telefonici come numeri semplici avrebbe visualizzato solo le prime tre cifre: ‘555’, e questo non sarebbe stato di grande utilità.
Non era necessario specificare una larghezza per i numeri telefonici poiché sono nell’ultima colonnna di ogni riga. Non c’è bisogno di avere un allineamento di spazi dopo di loro.
La tabella avrebbe potuto essere resa più leggibile aggiungendo
intestazioni in cima
alle colonne. Questo si può fare usando una regola BEGIN
(vedi la sezione I criteri di ricerca speciali BEGIN
ed END
)
in modo che le intestazioni siano stampate una sola volta, all’inizio del
programma awk
:
awk 'BEGIN { print "Nome Numero" print " ---- ------ " } { printf "%-10s %s\n", $1, $2 }' mail-list
L’esempio precedente usa sia l’istruzione print
che l’istruzione
printf
nello stesso programma. Si possono ottenere gli stessi
risultati usando solo istruzioni printf
:
awk 'BEGIN { printf "%-10s %s\n", "Nome", "Numero" printf "%-10s %s\n", "----", "------" } { printf "%-10s %s\n", $1, $2 }' mail-list
Stampare ogni intestazione di colonna con la stessa specifica di formato usata per gli elementi delle colonne ci dà la certezza che le intestazioni sono allineate esattamente come le colonne.
Il fatto che usiamo per tre volte la stessa specifica di formato si può evidenziare memorizzandola in una variabile, così:
awk 'BEGIN { format = "%-10s %s\n" printf format, "Nome", "Numero" printf format, "----", "------" } { printf format, $1, $2 }' mail-list
Precedente: Modificatori di formato, Su: Printf [Contenuti][Indice]