-Аргумент выравнивается по левому краю поля вывода (по умолчанию принято правостороннее выравнивание)
пробелЕсли аргумент является положительным числом, перед ним ставится
пробел, а если отрицательным — знак минус
+Если аргумент является числом, ему всегда предшествует знак плюс,
даже если это положительное число
#Выбирается альтернативная форма спецификатора:
%о — восьмеричному числу предшествует ведущий ноль;
%x — шестнадцатеричному числу предшествует запись 0x;
%x — шестнадцатеричному числу предшествует запись Оx;
%e, %E, %f — число всегда содержит десятичную точку;
%g, %G — вывод незначащих нулей не подавляется
0Если длина поля вывода больше, чем число символов в представлении
аргумента, аргумент дополняется нулями, а не пробелами
ширинаШирина поля вывода; если длина поля больше, чем число символов
в представлении аргумента, аргумент по умолчанию дополняется
пробелами
. точностьТочность представления аргумента:
%е, %е, %f — число символов после десятичной точки;
%g, %g — максимальное число значащих цифр;
%d, %o, %i, %u, %x, %X — минимальное число выводимых цифр;
% s — максимальное число выводимых символов

Преобразование символов

Чтобы узнать, ASCII–код какого символа равен 65, можно с помощью команды echo направить строку "65" утилите awk и затем передать ее в качестве аргумента команде printf со спецификатором %с. Команда printf выполнит преобразование автоматически:

$ echo "65" | awk '{printf "%c\n", $0}'

A

Как видите, это символ 'A'. Обратите внимание на наличие в команде символа новой строки (\n). Необходимость в нем объясняется тем, что команда printf по умолчанию не записывает этот символ в выходной поток. Если не указать Escape–последовательность \n, сразу после буквы 'А' в той же строке будет отображено приглашение интерпретатора shell, что может смутить пользователя, работающего в данный момент за терминалом.

Конечно, код символа может быть указан непосредственно в команде printf:

$ awk 'BEGIN {printf "%c\n", 65}'

A

Форматированный вывод

Предположим, необходимо отобразить имена учеников и их идентификаторы, причем имена должны быть выровнены по левому краю и размещаться в поле длиной 15 символов. В конце строки форматирования стоит символ новой строки (\n(,

служащий для разделения записей. Выводимые данные будут размещаться в двух колонках:

$ awk '{printf "%-l5s %d\n", $1, $3}' grade.txt

M. Tansley 48311

J. Lulu 48311

P. Bunny 4 8

J. Troll 4842

L. Tansley 4712

<p><emphasis><strong>9.2.13. Передача переменных утилите awk</strong></emphasis></p>

Переменные можно создавать не только в сценарии awk, но и непосредственно в командной строке. Формат вызова утилиты awk в этом случае таков:

awk 'сценарий' переменная=значение входной_файл

В следующем примере переменная AGE создается в командной строке и инициализируется значением 10. Показанная команда находит студентов, возраст которых не превышает 10 лет.

$ awk '{if($5 < AGE) print $0}' AGE=10 grade.txt

M. Tansley 05/99 48311 Green 8 40 44

J. Lulu 06/99 48317 green 9 24 26

Рассмотрим более сложный пример. Системная команда df отображает информацию о смонтированных файловых системах. Результаты ее работы по умолчанию имеют следующий формат:

ИмяЧисло блоков .Занято блоковСвободно блоковПроцентТочка монтирования
файловой системызанятых
блоков
Столбец123456
Перейти на страницу:

Похожие книги