AWK - красивая печать
До сих пор мы использовали AWK print а также printfфункции для вывода данных на стандартный вывод. Но printf намного мощнее того, что мы видели раньше. Эта функция заимствована из языка C и очень полезна при создании форматированного вывода. Ниже приведен синтаксис оператора printf -
Синтаксис
printf fmt, expr-list
В приведенном выше синтаксисе fmt представляет собой строку спецификаций формата и констант. expr-list это список аргументов, соответствующих спецификаторам формата.
Последовательности побега
Как и любая строка, формат может содержать встроенные escape-последовательности. Ниже обсуждаются escape-последовательности, поддерживаемые AWK -
Новая линия
В следующем примере печатается Hello а также World в отдельных строках с использованием символа новой строки -
Example
[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'
Выполнив этот код, вы получите следующий результат -
Output
Hello
World
Горизонтальная вкладка
В следующем примере используется горизонтальная вкладка для отображения другого поля -
Example
[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'
Выполнив приведенный выше код, вы получите следующий результат -
Output
Sr No Name Sub Marks
Вертикальная табуляция
В следующем примере используется вертикальная табуляция после каждого поля -
Example
[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'
Выполнив этот код, вы получите следующий результат -
Output
Sr No
Name
Sub
Marks
Backspace
В следующем примере после каждого поля, кроме последнего, печатается возврат. Удаляет последнее число из первых трех полей. Например,Field 1 отображается как Field, потому что последний символ удаляется с помощью Backspace. Однако последнее полеField 4 отображается как есть, поскольку у нас не было \b после Field 4.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'
Выполнив этот код, вы получите следующий результат -
Output
Field Field Field Field 4
Возврат каретки
В следующем примере после печати каждого поля мы выполняем Carriage Return и напечатайте следующее значение поверх текущего напечатанного значения. Это означает, что в окончательном выводе вы можете увидеть толькоField 4, так как это было последнее, что печаталось поверх всех предыдущих полей.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'
Выполнив этот код, вы получите следующий результат -
Output
Field 4
Подача формы
В следующем примере используется подача формы после печати каждого поля.
Example
[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'
Выполнив этот код, вы получите следующий результат -
Output
Sr No
Name
Sub
Marks
Описатель формата
Как и в языке C, AWK также имеет спецификаторы формата. Версия AWK оператора printf принимает следующие форматы спецификации преобразования:
% c
Он печатает один символ. Если аргумент, используемый для%cявляется числовым, обрабатывается как символ и печатается. В противном случае предполагается, что аргумент является строкой, и печатается единственный первый символ этой строки.
Example
[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'
Output
Выполнив этот код, вы получите следующий результат -
ASCII value 65 = character A
% d и% i
Он печатает только целую часть десятичного числа.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'
Выполнив этот код, вы получите следующий результат -
Output
Percentags = 80
% e и% E
Он печатает число с плавающей запятой в форме [-] d.dddddde [+ -] dd.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'
Выполнив этот код, вы получите следующий результат -
Output
Percentags = 8.066000e+01
В %E формат использует E вместо e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'
Выполнив этот код, вы получите следующий результат -
Output
Percentags = 8.066000E+01
% f
Он печатает число с плавающей запятой в форме [-] ddd.dddddd.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'
Выполнив этот код, вы получите следующий результат -
Output
Percentags = 80.660000
% г и% G
Использует преобразование% e или% f, в зависимости от того, что короче, с подавлением незначащих нулей.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'
Output
Выполнив этот код, вы получите следующий результат -
Percentags = 80.66
В %G формат использует %E вместо% e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'
Выполнив этот код, вы получите следующий результат -
Output
Percentags = 80.66
% o
Он печатает восьмеричное число без знака.
Example
[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'
Выполнив этот код, вы получите следующий результат -
Output
Octal representation of decimal number 10 = 12
% u
Он печатает десятичное число без знака.
Example
[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'
Выполнив этот код, вы получите следующий результат -
Output
Unsigned 10 = 10
% s
Он печатает строку символов.
Example
[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'
Выполнив этот код, вы получите следующий результат -
Output
Name = Sherlock Holmes
% x и% X
Он печатает шестнадцатеричное число без знака. В%X формат использует прописные буквы вместо строчных.
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'
Выполнив этот код, вы получите следующий результат -
Output
Hexadecimal representation of decimal number 15 = f
Теперь позвольте использовать% X и наблюдать результат -
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'
Выполнив этот код, вы получите следующий результат -
Output
Hexadecimal representation of decimal number 15 = F
%%
Он печатает сингл % символ и аргумент не преобразуется.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'
Выполнив этот код, вы получите следующий результат -
Output
Percentags = 80%
Дополнительные параметры с%
С участием % мы можем использовать следующие необязательные параметры -
Ширина
Поле дополняется до width. По умолчанию поле заполняется пробелами, но когда используется флаг 0, оно дополняется нулями.
Example
[jerry]$ awk 'BEGIN {
num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2
}'
Выполнив этот код, вы получите следующий результат -
Output
Num1 = 10
Num2 = 20
Ведущие нули
Начальный ноль действует как флаг, который указывает, что вывод должен быть дополнен нулями вместо пробелов. Обратите внимание, что этот флаг действует только в том случае, если поле шире, чем печатаемое значение. Следующий пример описывает это -
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2
}'
Выполнив этот код, вы получите следующий результат -
Output
Num1 = -0010
Num2 = 00020
Левое обоснование
Выражение должно быть выровнено по левому краю в пределах своего поля. Если строка ввода меньше указанного количества символов и вы хотите, чтобы она была выровнена по левому краю, то есть путем добавления пробелов справа, используйте символ минус (-) сразу после% и перед числом.
В следующем примере вывод команды AWK передается по конвейеру команде cat для отображения символа КОНЕЦ СТРОКИ ($).
Example
[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte
Выполнив этот код, вы получите следующий результат -
Output
Num = 10 $
Знак префикса
Он всегда ставит перед числовыми значениями знак, даже если значение положительное.
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2
}'
Выполнив этот код, вы получите следующий результат -
Output
Num1 = -10
Num2 = +20
Хеш
Для% o он предоставляет начальный ноль. Для% x и% X он предоставляет начальные 0x или 0X соответственно, только если результат не равен нулю. Для% e,% E,% f и% F результат всегда содержит десятичную точку. Для% g и% G конечные нули не удаляются из результата. Следующий пример описывает это -
Example
[jerry]$ awk 'BEGIN {
printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'
Выполнив этот код, вы получите следующий результат -
Output
Octal representation = 012
Hexadecimal representation = 0XA