Аргумент
|
Формат
|
Результат
|
Примечания
|
380
|
"%d"
|
380
|
Простое форматирование целых чисел
|
380
|
"%#x"
|
0x17c
|
Форматирование целочисленных значений в шестнадцатеричное представление с использованием альтернативного форматирования
|
380
|
"%05d"
|
00380
|
Форматирование целочисленных значений с ведущими нулями и минимальным размером поля, равным пяти символам
|
380
|
"%05.5f"
|
380.00000
|
Форматирование вещественных значений с ведущими нулями и 5 знаками после запятой. Поскольку указанная минимальная ширина поля (5) меньше фактической ширины отформатированного числа, ведущие нули не были добавлены
|
380
|
"%010.5f"
|
0380.00000
|
Ширина поля вывода увеличена до 10, вследствие чего появился ведущий нуль
|
380
|
"%+d"
|
+380
|
Флаг + требует выводить знак у положительных чисел
|
380
|
"%-d"
|
380
|
Флаг - обеспечивает форматирование с выравниванием по левому краю
|
abcdefghijk
|
"%5s"
|
abcdefghijk
|
Форматирование строки в поле с указанной минимальной шириной
|
abcdefghijk
|
"%.5s"
|
фисву
|
Применение компонента точности к строке привело к ее усечению
|
И еще раз: команда printf в основном используется в сценариях, где применяется для форматирования табличных данных, а не как самостоятельный инструмент командной строки. Тем не менее мы можем использовать ее для решения различных задач форматирования. Во-первых, попробуем вывести несколько полей, разделив их символами табуляции:
[me@linuxbox ~]$ printf "%s\t%s\t%s\n" str1 str2 str3
str1 str2 str3
Добавив \t (экранированную последовательность, соответствующую символу табуляции), мы достигли желаемого эффекта. Затем попробуем вывести несколько чисел в форматированном виде:
[me@linuxbox ~]$ printf "Line: %05d %15.3f Result: %+15d\n" 1071 3.14156295 32589
Line: 01071 3.142 Result: +32589
Здесь демонстрируется действие компонента, определяющего минимальную ширину поля. А можно ли подобным образом отформатировать небольшую веб-страницу?
[me@linuxbox ~]$ printf "\n\t
\n\t\t %s \n\t
\n\t
\n\t\t
%s
\n\t\n\n" "Page Title" "Page Content"
Page Content
Системы форматирования документов
До сих пор мы исследовали простые инструменты форматирования текста. Они хорошо подходят для решения небольших и простых задач, но как быть с более сложными заданиями? Одна из причин большой популярности операционной системы Unix среди технических специалистов и научных работников (кроме мощной поддержки многозадачности и многопользовательского окружения для выполнения любых работ, связанных с разработкой программного обеспечения) состоит в наличии инструментов, которые можно использовать для создания самых разных документов, таких как научные и академические публикации. Фактически, как описывается в документации GNU, средства подготовки документов положительно сказались на разработке Unix:
Первая версия UNIX была создана на машине PDP-7, простаивавшей в Bell Labs. В 1971-м разработчики захотели заполучить PDP-11 для дальнейшей работы над операционной системой. Чтобы оправдать затраты на эту систему, они внесли предложение о реализации системы форматирования документов для патентного бюро в AT&T. Эта первая программа форматирования являлась переделкой программы roff Макиллроя (McIllroy), которую написал Д.Ф. Оссанна (J. F. Ossanna).
Семейство программ roff и T EX
В области систем форматирования документов доминируют два основных семейства программ: уходящие корнями в оригинальную программу roff, включая nroff и troff, и основанные на системе верстки Дональда Кнута T EX (произносится как «тек»). И да, буква «E» в середине имени действительно смещена вниз.
Имя roff произошло от словосочетания «run off» (напечатать), как во фразе: «Я напечатал копию для вас». Программа nroff используется для форматирования документов перед выводом на устройства, использующие моноширинные шрифты, такие как алфавитно-цифровые терминалы и принтеры, действующие подобно пишущим машинкам. На момент появления программы такие устройства составляли подавляющее большинство устройств вывода, подключаемых к компьютерам. Позднее появилась программа troff, форматирующая документы для вывода на наборные устройства, используемые для производства «готовых к тиражированию» макетов. Большинство современных принтеров способны имитировать вывод таких наборных устройств. Семейство roff также включает ряд других программ для подготовки фрагментов документов. К их числу относятся eqn (для форматирования математических формул) и tbl (для форматирования таблиц).
Читать дальше