Precedente: , Su: Printf   [Contenuti][Indice]


5.5.4 Esempi d’uso di 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: , Su: Printf   [Contenuti][Indice]