Учебники

AWK — Pretty Printing

До сих пор мы использовали функции print и printf AWK для отображения данных на стандартном выводе. Но printf гораздо мощнее, чем мы видели раньше. Эта функция заимствована из языка Си и очень полезна при создании форматированного вывода. Ниже приведен синтаксис оператора printf:

Синтаксис

printf fmt, expr-list

В приведенном выше синтаксисе fmt представляет собой строку спецификаций и констант формата. expr-list — это список аргументов, соответствующих спецификаторам формата.

Побег последовательности

Подобно любой строке, формат может содержать встроенные escape-последовательности. Ниже обсуждаются escape-последовательности, поддерживаемые AWK —

Новая линия

Следующий пример печатает Hello и World в отдельных строках, используя символ новой строки —

пример

[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'

Выполнив этот код, вы получите следующий результат —

Выход

Hello
World

Горизонтальная вкладка

В следующем примере горизонтальная вкладка используется для отображения другого поля.

пример

[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'

Выполнив приведенный выше код, вы получите следующий результат —

Выход

Sr No   Name    Sub Marks

Вертикальная вкладка

В следующем примере используется вертикальная вкладка после каждого поля —

пример

[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'

Выполнив этот код, вы получите следующий результат —

Выход

Sr No
   Name
      Sub
         Marks

возврат на одну позицию

В следующем примере после каждого поля, кроме последнего, печатается символ возврата. Стирает последний номер из первых трех полей. Например, поле 1 отображается как поле , потому что последний символ удаляется с помощью возврата. Однако последнее поле Field 4 отображается как есть, поскольку у нас не было a \ b после поля 4 .

пример

[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'

Выполнив этот код, вы получите следующий результат —

Выход

Field Field Field Field 4

Возврат каретки

В следующем примере после печати каждого поля мы выполняем возврат каретки и печатаем следующее значение поверх текущего напечатанного значения. Это означает, что в конечном выводе вы видите только поле 4 , так как оно было последним, которое было напечатано поверх всех предыдущих полей.

пример

[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'

Выполнив этот код, вы получите следующий результат —

Выход

Field 4

Подача формы

В следующем примере используется подача формы после печати каждого поля.

пример

[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'

Выполнив этот код, вы получите следующий результат —

Выход

Sr No
   Name
      Sub
         Marks

Спецификатор формата

Как и в языке C, AWK также имеет спецификаторы формата. Версия AWK оператора printf принимает следующие форматы спецификации преобразования:

% с

Он печатает один символ. Если аргумент, используемый для % c, является числовым, он обрабатывается как символ и печатается. В противном случае аргумент считается строкой, и печатается единственный первый символ этой строки.

пример

[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'

Выход

Выполнив этот код, вы получите следующий результат —

ASCII value 65 = character A

% d и% i

Он печатает только целую часть десятичного числа.

пример

[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'

Выполнив этот код, вы получите следующий результат —

Выход

Percentags = 80

% e и% E

Он печатает число с плавающей запятой в форме [-] d.dddddde [+ -] dd.

пример

[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'

Выполнив этот код, вы получите следующий результат —

Выход

Percentags = 8.066000e+01

Формат % E использует E вместо e.

пример

[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'

Выполнив этот код, вы получите следующий результат —

Выход

Percentags = 8.066000E+01

% е

Он печатает число с плавающей запятой в форме [-] ddd.dddddd.

пример

[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'

Выполнив этот код, вы получите следующий результат —

Выход

Percentags = 80.660000

% g и% G

Использует% e или% f преобразование, в зависимости от того, что короче, с подавлением незначительных нулей.

пример

[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'

Выход

Выполнив этот код, вы получите следующий результат —

Percentags = 80.66

Формат % G использует % E вместо% e.

пример

[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'

Выполнив этот код, вы получите следующий результат —

Выход

Percentags = 80.66

% о

Он печатает восьмеричное число без знака.

пример

[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'

Выполнив этот код, вы получите следующий результат —

Выход

Octal representation of decimal number 10 = 12

% U

Он печатает десятичное число без знака.

пример

[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'

Выполнив этот код, вы получите следующий результат —

Выход

Unsigned 10 = 10

% s

Он печатает строку символов.

пример

[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'

Выполнив этот код, вы получите следующий результат —

Выход

Name = Sherlock Holmes

% x и% X

Он печатает шестнадцатеричное число без знака. Формат % X использует заглавные буквы вместо строчных.

пример

[jerry]$ awk 'BEGIN { 
   printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'

Выполнив этот код, вы получите следующий результат —

Выход

Hexadecimal representation of decimal number 15 = f

Теперь давайте используем% X и наблюдаем результат —

пример

[jerry]$ awk 'BEGIN { 
   printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'

Выполнив этот код, вы получите следующий результат —

Выход

Hexadecimal representation of decimal number 15 = F

%%

Он печатает один символ %, и ни один аргумент не преобразуется.

пример

[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'

Выполнив этот код, вы получите следующий результат —

Выход

Percentags = 80%

Необязательные параметры с%

С % мы можем использовать следующие необязательные параметры —

ширина

Поле дополняется до ширины . По умолчанию поле заполняется пробелами, но когда используется флаг 0, оно заполняется нулями.

пример

[jerry]$ awk 'BEGIN { 
   num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2 
}'

Выполнив этот код, вы получите следующий результат —

Выход

Num1 =         10
Num2 =         20

Ведущие нули

Ведущий ноль действует как флаг, который указывает, что выходные данные должны быть дополнены нулями вместо пробелов. Обратите внимание, что этот флаг действует только тогда, когда поле шире, чем значение для печати. Следующий пример описывает это —

пример

[jerry]$ awk 'BEGIN { 
   num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2 
}'

Выполнив этот код, вы получите следующий результат —

Выход

Num1 = -0010
Num2 = 00020

Левое оправдание

Выражение должно быть выровнено по левому краю в пределах его поля. Если входная строка меньше указанного числа символов и вы хотите, чтобы она выравнивалась по левому краю, т. Е. Путем добавления пробелов справа, используйте знак минуса (-) сразу после% и перед числом.

В следующем примере выходные данные команды AWK передаются команде cat для отображения символа END OF LINE ($).

пример

[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte

Выполнив этот код, вы получите следующий результат —

Выход

Num = 10   $

Знак префикса

Это всегда префикс числовых значений со знаком, даже если значение положительное.

пример

[jerry]$ awk 'BEGIN { 
   num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2 
}'

Выполнив этот код, вы получите следующий результат —

Выход

Num1 = -10
Num2 = +20

гашиш

Для% o он поставляет ведущий ноль. Для% x и% X он предоставляет ведущие 0x или 0X соответственно, только если результат не равен нулю. Для% e,% E,% f и% F результат всегда содержит десятичную точку. Для% g и% G конечные нули не удаляются из результата. Следующий пример описывает это —

пример

[jerry]$ awk 'BEGIN { 
   printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'

Выполнив этот код, вы получите следующий результат —

Выход