printfの使用例
次に、printfを使って桁揃えされた表を作成する方法を示します。
awk '{ printf "%-10s %s\n", $1, $2 }' BBS-list
これは、`BBS-list'ファイルの電子掲示版名($1)を、10文字の文字列として左揃えで表示します。また、電話番号($2)を同じ行のうしろに表示します。これで、桁揃えされた2欄の、名前と電話番号の表が出力されます。
aardvark 555-5553 alpo-net 555-3412 barfly 555-7685 bites 555-1675 camelot 555-0542 core 555-2912 fooey 555-1234 foot 555-6699 macfoo 555-6480 sdace 555-3430 sabafoo 555-2127
電話番号を数として表示するように指定しなかったことに気付きましたか? 電話番号はダッシュで区切られているので、文字列として表示しなければならないのです。電話番号を数として表示しようとすると、ダッシュは負符号として解釈されます。その場合、結果はかなり混乱したものになります。
電話番号に対しては幅を指定しませんでしたが、これは、電話番号は行の最後の項目だからです。電話番号のあとにはスペースを付ける必要はありません。
欄の上部に標題をつければ、もっと見栄えの良い表になります。これには、次のようにawkプログラムの先頭でBEGINパターン(see section 特別なパターンBEGINおよびEND)を使って、標題を1度だけ表示するようにしてください。
awk 'BEGIN { print "Name Number"
print "---- ------" }
{ printf "%-10s %s\n", $1, $2 }' BBS-list
この例で、print文とprintf文を組み合わせて使っていることに気付きましたか? 次のようにprintf文だけでこれと同じ結果を得ることもできます。
awk 'BEGIN { printf "%-10s %s\n", "Name", "Number"
printf "%-10s %s\n", "----", "------" }
{ printf "%-10s %s\n", $1, $2 }' BBS-list
各欄の標題を、欄の要素と同じ書式指定で出力して、表題も欄と同じように確実に桁揃えされるようにしています。
同じ書式指定が3回使われているという事実は、次のように書式指定を変数に格納することにより強調できます。
awk 'BEGIN { format = "%-10s %s\n"
printf format, "Name", "Number"
printf format, "----", "------" }
{ printf format, $1, $2 }' BBS-list
ためしに、前のprint文(see section print文)の節で説明した`inventory-shipped'の例の、表題と表のデータをprintf文でそろえてみてください。