Руководство пользователя для GNU Awk
6. Печатный вывод
6.5 Использование операторов printf для декоративной печати
6.5.3 Модификаторы в форматах для printf
Спецификатор формата может включать в себя модификаторы, определяющие, какая порция значения аргумента печатается и сколько места получает. Модификаторы располагаются между `%' и управляющей форматом буквой. В следующих ниже примерах мы используем маркер "ffl" для представления пробелов в выводе. Приведем возможные модификаторы в порядке, в котором они могут появиться:
-
Знак минуса, используется перед модификатором ширины (см. ниже), требует выравнивания аргумента по левому краю поля указанной ширины. Нормально аргумент выравнивается по правому краю. Так, printf "%-4s", "foo" печатает `fooffl'.
пробел
При выдаче чисел предваряет пробелом положительные значения и минусом отрицательные.
+
Знак плюса пишется перед модификатором ширины (см. ниже), требует всегда ставить знак числа во всех случаях. `+' подавляет модификатор пробел.
#
Означает "альтернативную форму" для некоторых управляющих букв. Для `%o' требует добавить ведущий ноль. Для For `%x' и `%X' добавить ведущий `0x' или`0X' в случае ненулевого результата. Для `%e', `%E'и `%f' результат всегда будет иметь десятичную точку. При `%g' и `%G' завершающие нули не удаляются из результата.
0
Ведущий `0' (ноль) действует как флажок, указывающий, что вывод должен заполняться нулями вместо пробелов. Это применяется даже к нечисловым форматам вывода (d.c.). Этот флажок действует только тогда, когда ширина поля больше печатаемого значения.
ширина
Это число, указывающее желаемую минимальную ширину поля. Помещение любого числа между знаком `%' управляющий форматом буквы требует расширения поля до указанного размера. Способ сделать это по умолчанию состоит в заполнении поля пробелами слева.
Например, printf "%4s", "foo" печатает `fflfoo'. Значение ширины есть минимальная ширина, а не максимальная. Если значение аргумента требует знаков больше, чем указанная ширина, ширина увеличивается до необходимой. Так printf "%4s", "foobar" печатает `foobar'. Указание знака минус перед шириной предписывает пополнять вывод пробелами справа, а не слева.
.prec (точность)
Это число, которое указывает точность при печати. В случае форматов `e', `E' и `f' оно означает количество цифр, которые вы хотите напечатать справа от десятичной точки. Для форматов `g' и `G' оно указывает максимальное количество значащих цифр. Для форматов `d', `o', `i', `u', `x' и `X' оно указывает минимальное количество печатаемых цифр. Для цепочек оно указывает максимальное количество знаков из цепочки, которые должны быть напечатаны. Таким образом,
printf "%.4s", "foobar" печатает `foob'.
Поддерживаются также динамическая ширина и свойство prec оператора printf из библиотеки Си (for example, "%*.*s"). Вместо явного указания ширины и/или значений prec в форматной строке их можно передавать в списке аргументов.
Например:
w = 5 p = 3 s = "abcdefg" printf "%*.*s"n", w, p, s
в точности эквивалентно
s = "abcdefg" printf "%5.3s"n", s
Обе программы напечатают `fflfflabc'.
Ранние версии awk не имели этой возможности. Если вам приходится использовать такую версию, можно моделировать упомянутое свойство, используя конкатенацию при построении форматной строки, подобен следующему:
w = 5 p = 3 s = "abcdefg"
printf "%" w "." p "s"n", s
Это не очень легко читать, но это работает.
Си-программисты могли привыкнуть употреблять дополнительные флажки `l' и `h' в форматной строке printf. Но они отсутствуют в awk. Большинство реализаций awk молчаливо игнорируют эти флажки. Если `--lint' указано в командной строке (см. раздел 14.1 [Параметры командной строки], стр. 161), gawk предостережет от их использования. Если указано `--posix', их использование приведет к фатальной ошибке.
Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|