Шрифт:
Программа pr используется для разбивки текста на страницы. Перед печатью текст зачастую желательно разбить на страницы с несколькими пустыми строками в начале и в конце, чтобы получить пустые поля вверху и внизу каждой страницы. В дальнейшем эти поля можно использовать для вставки верхнего и нижнего колонтитулов.
Продемонстрируем работу pr, форматируя наш файл distros.txt в последовательность очень коротких страниц (ниже показаны только первые две страницы):
[me@linuxbox ~]$ pr -l 15 -w 65 distros.txt
2012-12-11 18:27 distros.txt Page 1
SUSE 10.2 12/07/2006
Fedora 10 11/25/2008
SUSE 11.0 06/19/2008
Ubuntu 8.04 04/24/2008
Fedora 8 11/08/2007
2012-12-11 18:27 distros.txt Page 2
SUSE 10.3 10/04/2007
Ubuntu 6.10 10/26/2006
Fedora 7 05/31/2007
Ubuntu 7.10 10/18/2007
Ubuntu 7.04 04/19/2007
В этом примере использовались параметры -l (длина (length) страницы) и -w (ширина (width) страницы), определяющие размеры «страницы» — 65 символов в ширину и 15 строк в длину. pr разбила содержимое файла distros.txt на отдельные страницы, добавив несколько пустых строк сверху и снизу, и создала заголовок по умолчанию, содержащий время последнего изменения файла, имя файла и номер страницы. Программа pr поддерживает множество параметров для управления форматированием страницы, но подробнее о них мы поговорим в главе 22.
printf — форматирование и вывод данных
В отличие от других команд в этой главе, команда printf не используется в конвейерной обработке (она не принимает данные со стандартного ввода) и редко применяется непосредственно в командной строке (чаще она используется в сценариях). Почему это так важно? Потому что она используется очень широко.
Команда printf (ее название происходит от print formatted (форматированный вывод)) первоначально была создана как функция для языка программирования C и впоследствии была реализована во многих других языках, включая язык командной оболочки. Фактически в bash команда printf реализована как встроенная команда. Она имеет следующий синтаксис:
printf "формат" аргументы
Команда принимает строку с описанием формата, которая затем применяется к списку аргументов. Отформатированный результат передается в стандартный вывод. Ниже приводится простой пример:
[me@linuxbox ~]$ printf "I formatted the string: %s\n" foo
I formatted the string: foo
Строка формата может содержать литеральный текст (такой, как I formatted the string:), экранированные последовательности (такие, как \n, символ перевода строки) и последовательности, начинающиеся с символа %, которые называют спецификаторами преобразований (conversion specifications). В примере выше спецификатор преобразования %s используется для форматирования строки foo и включения ее в вывод команды. Еще один пример:
[me@linuxbox ~]$ printf "I formatted '%s' as a string.\n" foo
I formatted 'foo' as a string.
Как видите, в выводе команды спецификатор преобразования %s замещается строкой foo. Преобразование s используется для форматирования строковых данных. Существуют также другие спецификаторы для других видов данных. В табл. 21.4 перечислены наиболее часто используемые типы данных.
Таблица 21.4. Спецификаторы типов данных, наиболее часто используемых в команде printf
Спецификатор
Описание
d
Форматирует число как десятичное целое со знаком
f
Форматирует и выводит вещественное число
o
Форматирует целочисленное значение как восьмеричное число
s
Форматирует строку
x
Форматирует целочисленное значение как шестнадцатеричное число, с использованием букв a—f нижнего регистра, где это необходимо
X
То же, что и x, но использует буквы верхнего регистра
%
Выводит литеральный символ % (то есть сам спецификатор имеет вид: %%)
Продемонстрируем действие каждого спецификатора преобразования на примере строки 380:
[me@linuxbox ~]$ printf "%d, %f, %o, %s, %x, %X\n" 380 380 380 380 380 380
380, 380.000000, 574, 380, 17c, 17C
Так как в строке формата указано шесть спецификаторов формата, нам потребовалось передать команде printf шесть аргументов. Шесть результатов показывают результат действия каждого спецификатора.