Руководство пользователя для GNU Awk
6. Печатный вывод
6.5 Использование операторов printf для декоративной печати
6.5.4 Примеры употребления printf
Покажем, как использовать printf для выдачи выровненной таблицы:
awk '- printf "%-10s %s"n", $1, $2 ""' BBS-list печатает имена досок объявлений
($1) из файла `BBS-list' в виде цепочки 10 символов, выровненной по левому краю. Она также печатает телефонные номера ($2) дальше в строке. Это оформляется в виде выровненной двух-столбцовой таблицы имен и телефонных номеров:
$ awk '- printf "%-10s %s"n", $1, $2 ""' BBS-list
a aardvark 555-5553
a alpo-net 555-3412
a barfly 555-7685
a bites 555-1675
a camelot 555-0542
a core 555-2912
a fooey 555-1234
a foot 555-6699
a macfoo 555-6480
a sdace 555-3430
a sabafoo 555-2127
Заметили ли вы, что мы не указывали, чтобы телефонные номера печатались как числа? Они должны печататься как цепочки, потому что разделены знаком дефиса Если бы мы пытались напечатать телефонные номера как числа, все что мы могли бы получить, было тремя первыми цифрами, `555'. Это было бы очень плохо.
Мы не указывали ширину телефонных номеров, потому что они располагаются в концах своих строк. После них не нужно располагать пробелы. Мы могли бы сделать нашу таблицу красивее, добавив заголовки вверху колонок. Чтобы сделать это, используем образец BEGIN (см. раздел 8.1.5 [Специальные образцы BEGIN и END], стр.100), чтобы заголовок напечатался только один раз, в начале awk-программы:
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
Печатая заголовок каждой колонки с теми же спецификациями формата, которые использовались для элементов столбца, мы обеспечили выравнивание заголовков так же как и столбцов.
Факт, что та же спецификация формата используется три раза, может быть подчеркнут помещением ее в переменную, подобно следующему:
awk 'BEGIN - format = "%-10s %s"n"
printf format, "Name", "Number"
printf format, "----", "------" "" -
printf format, $1, $2 ""' BBS-list
Попробуйте с помощью printf расположить в одой линии заголовки и табличные данные для нашей `inventory-shipped', рассмотренной ранее в разделе об операторе print (см. раздел 6.1 [Оператор print], стр. 61).
Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|