AWK — Обзор
AWK — это интерпретируемый язык программирования. Это очень мощный и специально разработанный для обработки текста. Его название происходит от фамилий его авторов — Альфред Ахо, Питер Вайнбергер и Брайан Керниган.
Версия AWK, которую распространяет GNU / Linux, написана и поддерживается Free Software Foundation (FSF); его часто называют GNU AWK.
Типы AWK
Ниже приведены варианты AWK —
-
AWK — Оригинальный AWK от AT & T Laboratory.
-
NAWK — более новая и улучшенная версия AWK от AT & T Laboratory.
-
GAWK — это GNU AWK. Все дистрибутивы GNU / Linux поставляются с GAWK. Он полностью совместим с AWK и NAWK.
AWK — Оригинальный AWK от AT & T Laboratory.
NAWK — более новая и улучшенная версия AWK от AT & T Laboratory.
GAWK — это GNU AWK. Все дистрибутивы GNU / Linux поставляются с GAWK. Он полностью совместим с AWK и NAWK.
Типичное использование AWK
Множество задач можно выполнить с помощью AWK. Ниже перечислены лишь некоторые из них —
- Обработка текста,
- Создание отформатированных текстовых отчетов,
- Выполнение арифметических операций,
- Выполнение строковых операций и многое другое.
AWK — Окружающая среда
В этой главе описывается, как настроить среду AWK в вашей системе GNU / Linux.
Установка с помощью диспетчера пакетов
Как правило, AWK доступен по умолчанию в большинстве дистрибутивов GNU / Linux. Вы можете использовать какую команду, чтобы проверить, присутствует ли она в вашей системе или нет. Если у вас нет AWK, установите его в GNU / Linux на основе Debian с помощью менеджера пакетов Advance Package Tool (APT) следующим образом:
[jeryy]$ sudo apt-get update [jeryy]$ sudo apt-get install gawk
Точно так же, чтобы установить AWK в GNU / Linux на основе RPM, используйте менеджер пакетов Yellowdog Updator Modifier yum следующим образом:
[root]# yum install gawk
После установки убедитесь, что AWK доступен через командную строку.
[jerry]$ which awk
Выполнив приведенный выше код, вы получите следующий результат —
/usr/bin/awk
Установка из исходного кода
Поскольку GNU AWK является частью проекта GNU, его исходный код доступен для бесплатной загрузки. Мы уже видели, как установить AWK с помощью менеджера пакетов. Давайте теперь поймем, как установить AWK из его исходного кода.
Следующая установка применима к любому программному обеспечению GNU / Linux, а также к большинству других свободно доступных программ. Вот шаги установки —
Шаг 1 — Загрузите исходный код из аутентичного места. Утилита командной строки wget служит для этой цели.
[jerry]$ wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.xz
Шаг 2 — Распакуйте и извлеките загруженный исходный код.
[jerry]$ tar xvf gawk-4.1.1.tar.xz
Шаг 3 — Перейдите в каталог и запустите configure.
[jerry]$ ./configure
Шаг 4 — После успешного завершения конфигурирование генерирует Makefile. Чтобы скомпилировать исходный код, введите команду make .
[jerry]$ make
Шаг 5 — Вы можете запустить набор тестов, чтобы убедиться, что сборка чистая. Это необязательный шаг.
[jerry]$ make check
Шаг 6 — Наконец, установите AWK. Убедитесь, что у вас есть привилегии суперпользователя.
[jerry]$ sudo make install
Вот и все! Вы успешно скомпилировали и установили AWK. Проверьте это, выполнив команду awk следующим образом:
[jerry]$ which awk
Выполнив этот код, вы получите следующий результат —
/usr/bin/awk
AWK — рабочий процесс
Чтобы стать опытным программистом на AWK, вам необходимо знать его внутреннее устройство. AWK следует простому рабочему процессу — чтение, выполнение и повторение. Следующая диаграмма изображает рабочий процесс AWK —
Читать
AWK читает строку из входного потока (файл, канал или стандартный ввод) и сохраняет ее в памяти.
казнить
Все команды AWK применяются последовательно на входе. По умолчанию AWK выполняет команды в каждой строке. Мы можем ограничить это, предоставляя шаблоны.
Повторение
Этот процесс повторяется, пока файл не достигнет своего конца.
Структура программы
Давайте теперь разберемся со структурой программы AWK.
НАЧАЛО блока
Синтаксис блока BEGIN следующий:
Синтаксис
BEGIN {awk-commands}
Блок BEGIN выполняется при запуске программы. Это выполняется только один раз. Это хорошее место для инициализации переменных. BEGIN — это ключевое слово AWK, поэтому оно должно быть в верхнем регистре. Обратите внимание, что этот блок не является обязательным.
Блок кузова
Синтаксис блока тела выглядит следующим образом:
Синтаксис
/pattern/ {awk-commands}
Блок body применяет команды AWK к каждой строке ввода. По умолчанию AWK выполняет команды в каждой строке. Мы можем ограничить это, предоставляя шаблоны. Обратите внимание, что для блока Body нет ключевых слов.
END Block
Синтаксис блока END следующий:
Синтаксис
END {awk-commands}
Блок END выполняется в конце программы. END — это ключевое слово AWK, поэтому оно должно быть в верхнем регистре. Обратите внимание, что этот блок не является обязательным.
Давайте создадим файл marks.txt, который содержит серийный номер, имя учащегося, имя субъекта и количество полученных оценок.
1) Amit Physics 80 2) Rahul Maths 90 3) Shyam Biology 87 4) Kedar English 85 5) Hari History 89
Давайте теперь отобразим содержимое файла с заголовком, используя скрипт AWK.
пример
[jerry]$ awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt
Когда этот код выполняется, он дает следующий результат —
Выход
Sr No Name Sub Marks 1) Amit Physics 80 2) Rahul Maths 90 3) Shyam Biology 87 4) Kedar English 85 5) Hari History 89
В начале AWK печатает заголовок из блока BEGIN. Затем в блоке body он читает строку из файла и выполняет команду печати AWK, которая просто печатает содержимое в стандартном потоке вывода. Этот процесс повторяется, пока файл не достигнет конца.
AWK — основной синтаксис
AWK прост в использовании. Мы можем предоставить команды AWK либо непосредственно из командной строки, либо в виде текстового файла, содержащего команды AWK.
Командная строка AWK
Мы можем указать команду AWK в одинарных кавычках в командной строке, как показано ниже:
awk [options] file ...
пример
Рассмотрим текстовый файл marks.txt со следующим содержанием —
1) Amit Physics 80 2) Rahul Maths 90 3) Shyam Biology 87 4) Kedar English 85 5) Hari History 89
Давайте отобразим полное содержимое файла, используя AWK, следующим образом:
пример
[jerry]$ awk '{print}' marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
1) Amit Physics 80 2) Rahul Maths 90 3) Shyam Biology 87 4) Kedar English 85 5) Hari History 89
Файл программы AWK
Мы можем предоставить команды AWK в файле сценария, как показано ниже:
awk [options] -f file ....
Сначала создайте текстовый файл command.awk, содержащий команду AWK, как показано ниже —
{print}
Теперь мы можем дать команду AWK прочитать команды из текстового файла и выполнить действие. Здесь мы достигаем того же результата, что и в приведенном выше примере.
пример
[jerry]$ awk -f command.awk marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
1) Amit Physics 80 2) Rahul Maths 90 3) Shyam Biology 87 4) Kedar English 85 5) Hari History 89
AWK Стандартные Опции
AWK поддерживает следующие стандартные параметры, которые могут быть предоставлены из командной строки.
Опция -v
Эта опция присваивает значение переменной. Это позволяет присваивать перед выполнением программы. В следующем примере описано использование параметра -v.
пример
[jerry]$ awk -v name=Jerry 'BEGIN{printf "Name = %s\n", name}'
Выполнив этот код, вы получите следующий результат —
Выход
Name = Jerry
Опция —dump-variable [= file]
Он печатает отсортированный список глобальных переменных и их окончательных значений в файл. Файл по умолчанию — awkvars.out .
пример
[jerry]$ awk --dump-variables '' [jerry]$ cat awkvars.out
Выполнив приведенный выше код, вы получите следующий результат —
Выход
ARGC: 1 ARGIND: 0 ARGV: array, 1 elements BINMODE: 0 CONVFMT: "%.6g" ERRNO: "" FIELDWIDTHS: "" FILENAME: "" FNR: 0 FPAT: "[^[:space:]]+" FS: " " IGNORECASE: 0 LINT: 0 NF: 0 NR: 0 OFMT: "%.6g" OFS: " " ORS: "\n" RLENGTH: 0 RS: "\n" RSTART: 0 RT: "" SUBSEP: "\034" TEXTDOMAIN: "messages"
Опция —help
Эта опция выводит справочное сообщение на стандартный вывод.
пример
[jerry]$ awk --help
Выполнив этот код, вы получите следующий результат —
Выход
Usage: awk [POSIX or GNU style options] -f progfile [--] file ... Usage: awk [POSIX or GNU style options] [--] 'program' file ... POSIX options : GNU long options: (standard) -f progfile --file=progfile -F fs --field-separator=fs -v var=val --assign=var=val Short options : GNU long options: (extensions) -b --characters-as-bytes -c --traditional -C --copyright -d[file] --dump-variables[=file] -e 'program-text' --source='program-text' -E file --exec=file -g --gen-pot -h --help -L [fatal] --lint[=fatal] -n --non-decimal-data -N --use-lc-numeric -O --optimize -p[file] --profile[=file] -P --posix -r --re-interval -S --sandbox -t --lint-old -V --version
Опция —lint [= fatal]
Эта опция позволяет проверять непереносимые или сомнительные конструкции. Когда указан фатальный аргумент, предупреждающие сообщения рассматриваются как ошибки. Следующий пример демонстрирует это —
пример
[jerry]$ awk --lint '' /bin/ls
Выполнив этот код, вы получите следующий результат —
Выход
awk: cmd. line:1: warning: empty program text on command line awk: cmd. line:1: warning: source file does not end in newline awk: warning: no program text at all!
Опция —posix
Эта опция включает строгую совместимость с POSIX, в которой отключены все общие и специфичные для gawk расширения.
Опция —profile [= file]
Эта опция генерирует печатную версию программы в файле. Файл по умолчанию — awkprof.out . Ниже простой пример иллюстрирует это —
пример
[jerry]$ awk --profile 'BEGIN{printf"---|Header|--\n"} {print} END{printf"---|Footer|---\n"}' marks.txt > /dev/null [jerry]$ cat awkprof.out
Выполнив этот код, вы получите следующий результат —
Выход
# gawk profile, created Sun Oct 26 19:50:48 2014 # BEGIN block(s) BEGIN { printf "---|Header|--\n" } # Rule(s) { print $0 } # END block(s) END { printf "---|Footer|---\n" }
Опция —traditional
Эта опция отключает все специфичные для gawk расширения.
Опция —version
Эта опция отображает информацию о версии программы AWK.
пример
[jerry]$ awk --version
Когда этот код выполняется, он дает следующий результат —
Выход
GNU Awk 4.0.1 Copyright (C) 1989, 1991-2012 Free Software Foundation.
AWK — Основные примеры
Эта глава описывает несколько полезных команд AWK и их соответствующие примеры. Рассмотрим текстовый файл marks.txt для обработки со следующим содержимым:
1) Amit Physics 80 2) Rahul Maths 90 3) Shyam Biology 87 4) Kedar English 85 5) Hari History 89
Печать столбца или поля
Вы можете настроить AWK на печать только определенных столбцов из поля ввода. Следующий пример демонстрирует это —
пример
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
Physics 80 Maths 90 Biology 87 English 85 History 89
В файле marks.txt третий столбец содержит имя субъекта, а четвертый столбец содержит оценки, полученные по конкретному предмету. Давайте распечатаем эти два столбца с помощью команды печати AWK. В приведенном выше примере $ 3 и $ 4 представляют третье и четвертое поля соответственно из входной записи.
Печать всех строк
По умолчанию AWK печатает все строки, которые соответствуют шаблону.
пример
[jerry]$ awk '/a/ {print $0}' marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
2) Rahul Maths 90 3) Shyam Biology 87 4) Kedar English 85 5) Hari History 89
В приведенном выше примере мы ищем шаблон формы a . Когда сопоставление с образцом завершается успешно, он выполняет команду из блока body. При отсутствии блока тела — выполняется действие по умолчанию, которое заключается в печати записи. Следовательно, следующая команда дает тот же результат —
пример
[jerry]$ awk '/a/' marks.txt
Печать столбцов по шаблону
Когда совпадение с образцом завершается успешно, AWK печатает всю запись по умолчанию. Но вы можете настроить AWK на печать только определенных полей. Например, следующий пример печатает третье и четвертое поле, когда совпадение с образцом завершается успешно.
пример
[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
Maths 90 Biology 87 English 85 History 89
Печать колонки в любом порядке
Вы можете печатать столбцы в любом порядке. Например, в следующем примере печатается четвертый столбец, за которым следует третий столбец.
пример
[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt
Выполнив приведенный выше код, вы получите следующий результат —
Выход
90 Maths 87 Biology 85 English 89 History
Подсчет и печать совмещенного рисунка
Давайте посмотрим пример, где вы можете посчитать и напечатать количество строк, для которых совпадение с образцом прошло успешно.
пример
[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
Count = 4
В этом примере мы увеличиваем значение счетчика при успешном совпадении с шаблоном и печатаем это значение в блоке END. Обратите внимание, что в отличие от других языков программирования, нет необходимости объявлять переменную перед ее использованием.
Печать строк с более чем 18 символами
Давайте печатать только те строки, которые содержат более 18 символов.
пример
[jerry]$ awk 'length($0) > 18' marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
3) Shyam Biology 87 4) Kedar English 85
AWK предоставляет встроенную функцию длины, которая возвращает длину строки. Переменная $ 0 хранит всю строку, и при отсутствии блока тела выполняется действие по умолчанию, то есть действие печати. Следовательно, если строка содержит более 18 символов, то результаты сравнения верны, и строка печатается.
AWK — встроенные переменные
AWK предоставляет несколько встроенных переменных. Они играют важную роль при написании сценариев AWK. Эта глава демонстрирует использование встроенных переменных.
Стандартные переменные AWK
Стандартные переменные AWK обсуждаются ниже.
ARGC
Это подразумевает количество аргументов, представленных в командной строке.
пример
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
Выполнив этот код, вы получите следующий результат —
Выход
Arguments = 5
Но почему AWK показывает 5, когда вы передали только 4 аргумента? Просто проверьте следующий пример, чтобы очистить ваши сомнения.
ARGV
Это массив, в котором хранятся аргументы командной строки. Допустимый индекс массива — от 0 до ARGC-1.
пример
[jerry]$ awk 'BEGIN { for (i = 0; i < ARGC - 1; ++i) { printf "ARGV[%d] = %s\n", i, ARGV[i] } }' one two three four
Выполнив этот код, вы получите следующий результат —
Выход
ARGV[0] = awk ARGV[1] = one ARGV[2] = two ARGV[3] = three
CONVFMT
Он представляет формат преобразования для чисел. Его значение по умолчанию % .6g .
пример
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
Выполнив этот код, вы получите следующий результат —
Выход
Conversion Format = %.6g
ЭНВАЙРОН
Это ассоциативный массив переменных среды.
пример
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
Выполнив этот код, вы получите следующий результат —
Выход
jerry
Чтобы найти имена других переменных среды, используйте команду env .
ИМЯ ФАЙЛА
Он представляет текущее имя файла.
пример
[jerry]$ awk 'END {print FILENAME}' marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
marks.txt
Обратите внимание, что FILENAME не определен в блоке BEGIN.
FS
Он представляет собой (входной) разделитель полей, и его значением по умолчанию является пробел. Вы также можете изменить это, используя параметр командной строки -F .
пример
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
Выполнив этот код, вы получите следующий результат —
Выход
FS = $
NF
Он представляет количество полей в текущей записи. Например, в следующем примере печатаются только те строки, которые содержат более двух полей.
пример
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
Выполнив этот код, вы получите следующий результат —
Выход
One Two Three One Two Three Four
NR
Он представляет номер текущей записи. Например, следующий пример печатает запись, если номер текущей записи меньше трех.
пример
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
Выполнив этот код, вы получите следующий результат —
Выход
One Two One Two Three
FNR
Это похоже на NR, но относительно текущего файла. Это полезно, когда AWK работает с несколькими файлами. Значение FNR сбрасывается с новым файлом.
OFMT
Он представляет номер выходного формата, и его значением по умолчанию является % .6g .
пример
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
Выполнив этот код, вы получите следующий результат —
Выход
OFMT = %.6g
OFS
Он представляет разделитель выходного поля, и его значением по умолчанию является пробел.
пример
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
Выполнив этот код, вы получите следующий результат —
Выход
OFS = $
ORS
Он представляет разделитель выходных записей, и его значением по умолчанию является перевод строки.
пример
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
Выполнив приведенный выше код, вы получите следующий результат —
Выход
ORS = $ $
RLENGTH
Он представляет длину строки, сопоставленной функцией соответствия. Функция соответствия AWK ищет данную строку во входной строке.
пример
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
Выполнив этот код, вы получите следующий результат —
Выход
2
RS
Он представляет (входной) разделитель записей, и его значением по умолчанию является перевод строки.
пример
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
Выполнив этот код, вы получите следующий результат —
Выход
RS = $ $
RSTART
Он представляет первую позицию в строке, сопоставленной функцией соответствия.
пример
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
Выполнив этот код, вы получите следующий результат —
Выход
9
SUBSEP
Он представляет символ разделителя для индексов массива, и его значение по умолчанию равно \ 034 .
пример
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte
Выполнив этот код, вы получите следующий результат —
Выход
SUBSEP = ^\$
$ 0
Он представляет всю входную запись.
пример
[jerry]$ awk '{print $0}' marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
1) Amit Physics 80 2) Rahul Maths 90 3) Shyam Biology 87 4) Kedar English 85 5) Hari History 89
$ п
Он представляет n- е поле в текущей записи, где поля разделены символом FS.
пример
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
Physics 80 Maths 90 Biology 87 English 85 History 89
GNU AWK Конкретные переменные
GNU AWK конкретные переменные являются следующими —
ARGIND
Он представляет индекс в ARGV текущего обрабатываемого файла.
пример
[jerry]$ awk '{ print "ARGIND = ", ARGIND; print "Filename = ", ARGV[ARGIND] }' junk1 junk2 junk3
Выполнив этот код, вы получите следующий результат —
Выход
ARGIND = 1 Filename = junk1 ARGIND = 2 Filename = junk2 ARGIND = 3 Filename = junk3
BINMODE
Он используется для указания двоичного режима для всех файловых операций ввода-вывода в системах, не поддерживающих POSIX. Числовые значения 1, 2 или 3 указывают, что входные файлы, выходные файлы или все файлы, соответственно, должны использовать двоичный ввод / вывод. Строковые значения r или w указывают, что входные или выходные файлы, соответственно, должны использовать двоичный ввод / вывод. Строковые значения rw или wr указывают, что все файлы должны использовать двоичный ввод / вывод.
ERRNO
Строка указывает на ошибку при сбое перенаправления для getline или сбое вызова close .
пример
[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'
Выполнив этот код, вы получите следующий результат —
Выход
Error: No such file or directory
FIELDWIDTHS
Задан разделенный пробелами список переменных ширины поля, GAWK анализирует входные данные в поля фиксированной ширины вместо использования значения переменной FS в качестве разделителя полей.
IGNORECASE
Когда эта переменная установлена, GAWK становится без учета регистра. Следующий пример демонстрирует это —
пример
[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt
Выполнив этот код, вы получите следующий результат —
Выход
1) Amit Physics 80
LINT
Он обеспечивает динамическое управление опцией —lint из программы GAWK. Когда эта переменная установлена, GAWK печатает предупреждения lint. При присвоении строкового значения фатальному предупреждения lint становятся фатальными ошибками, точно так же как —lint = fatal .
пример
[jerry]$ awk 'BEGIN {LINT = 1; a}'
Выполнив этот код, вы получите следующий результат —
Выход
awk: cmd. line:1: warning: reference to uninitialized variable `a' awk: cmd. line:1: warning: statement has no effect
PROCINFO
Это ассоциативный массив, содержащий информацию о процессе, такую как действительные и эффективные номера UID, идентификационный номер процесса и т. Д.
пример
[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'
Выполнив этот код, вы получите следующий результат —
Выход
4316
ДОМЕН
Он представляет собой текстовый домен программы AWK. Он используется для поиска локализованных переводов для строк программы.
пример
[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'
Выполнив этот код, вы получите следующий результат —
Выход
messages
Приведенный выше вывод показывает текст на английском языке из-за локали en_IN
AWK — Операторы
Как и другие языки программирования, AWK также предоставляет большой набор операторов. В этой главе объясняются операторы AWK с подходящими примерами.
S.No. | Операторы и описание |
---|---|
1 | Арифметические Операторы
AWK поддерживает следующие арифметические операторы. |
2 | Операторы инкремента и декремента
AWK поддерживает следующие операторы увеличения и уменьшения. |
3 | Операторы присваивания
AWK поддерживает следующие операторы присваивания. |
4 | Реляционные операторы
AWK поддерживает следующие реляционные операторы. |
5 | Логические Операторы
AWK поддерживает следующие логические операторы. |
6 | Троичный оператор
Мы можем легко реализовать выражение условия, используя тернарный оператор. |
7 | Унарные операторы
AWK поддерживает следующие унарные операторы. |
8 | Экспоненциальные операторы
Существует два формата экспоненциальных операторов. |
9 | Оператор конкатенации строк
Пробел — это оператор конкатенации строк, который объединяет две строки. |
10 | Оператор членства в массиве
Это представлено в . Используется при доступе к элементам массива. |
11 | Операторы регулярных выражений
Этот пример объясняет две формы операторов регулярных выражений. |
AWK поддерживает следующие арифметические операторы.
AWK поддерживает следующие операторы увеличения и уменьшения.
AWK поддерживает следующие операторы присваивания.
AWK поддерживает следующие реляционные операторы.
AWK поддерживает следующие логические операторы.
Мы можем легко реализовать выражение условия, используя тернарный оператор.
AWK поддерживает следующие унарные операторы.
Существует два формата экспоненциальных операторов.
Пробел — это оператор конкатенации строк, который объединяет две строки.
Это представлено в . Используется при доступе к элементам массива.
Этот пример объясняет две формы операторов регулярных выражений.
AWK — Регулярные выражения
AWK очень мощный и эффективный в обработке регулярных выражений. Ряд сложных задач можно решить с помощью простых регулярных выражений. Любой эксперт командной строки знает силу регулярных выражений.
В этой главе рассматриваются стандартные регулярные выражения с подходящими примерами.
точка
Он соответствует любому отдельному символу, кроме символа конца строки. Например, следующий пример соответствует fin, fun, fan и т. Д.
пример
[jerry]$ echo -e "cat\nbat\nfun\nfin\nfan" | awk '/f.n/'
Выполнив приведенный выше код, вы получите следующий результат —
Выход
fun fin fan
Начало строки
Это соответствует началу строки. Например, в следующем примере печатаются все строки, начинающиеся с шаблона The .
пример
[jerry]$ echo -e "This\nThat\nThere\nTheir\nthese" | awk '/^The/'
Выполнив этот код, вы получите следующий результат —
Выход
There Their
Конец линии
Это соответствует концу строки. Например, в следующем примере печатаются строки, заканчивающиеся буквой n .
пример
[jerry]$ echo -e "knife\nknow\nfun\nfin\nfan\nnine" | awk '/n$/'
Выход
Выполнив этот код, вы получите следующий результат —
fun fin fan
Совпадает с набором символов
Используется для соответствия только одному из нескольких символов. Например, следующий пример соответствует шаблону Call и Tall, но не Ball .
пример
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[CT]all/'
Выход
Выполнив этот код, вы получите следующий результат —
Call Tall
Эксклюзивный набор
В эксклюзивном наборе карат сводит на нет набор символов в квадратных скобках. Например, следующий пример печатает только Ball .
пример
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[^CT]all/'
Выполнив этот код, вы получите следующий результат —
Выход
Ball
Внесение изменений
Вертикальная черта позволяет регулярным выражениям быть логически ИЛИ. Например, следующий пример печатает Ball and Call .
пример
[jerry]$ echo -e "Call\nTall\nBall\nSmall\nShall" | awk '/Call|Ball/'
Выполнив этот код, вы получите следующий результат —
Выход
Call Ball
Ноль или одно вхождение
Это соответствует нулю или одному вхождению предыдущего символа. Например, следующий пример соответствует цвету, а также цвет . Мы сделали вас необязательным персонажем, используя ? ,
пример
[jerry]$ echo -e "Colour\nColor" | awk '/Colou?r/'
Выполнив этот код, вы получите следующий результат —
Выход
Colour Color
Ноль или более вхождение
Это соответствует нулю или более вхождений предыдущего символа. Например, следующий пример соответствует ca, cat, catt и так далее.
пример
[jerry]$ echo -e "ca\ncat\ncatt" | awk '/cat*/'
Выполнив этот код, вы получите следующий результат —
Выход
ca cat catt
Одно или несколько вхождений
Это соответствует одному или нескольким вхождениям предыдущего символа. Например, приведенный ниже пример соответствует одному или нескольким вхождениям из 2 .
пример
[jerry]$ echo -e "111\n22\n123\n234\n456\n222" | awk '/2+/'
Выполнив приведенный выше код, вы получите следующий результат —
Выход
22 123 234 222
группирование
Круглые скобки () используются для группировки и символа | используется для альтернатив. Например, следующее регулярное выражение соответствует строкам, содержащим либо Apple Juice, либо Apple Cake .
пример
[jerry]$ echo -e "Apple Juice\nApple Pie\nApple Tart\nApple Cake" | awk '/Apple (Juice|Cake)/'
Выполнив этот код, вы получите следующий результат —
Выход
Apple Juice Apple Cake
AWK — Массивы
У AWK есть ассоциативные массивы, и одно из лучших преимуществ — индексы не должны быть непрерывным набором чисел; Вы можете использовать строку или число в качестве индекса массива. Кроме того, нет необходимости заранее объявлять размер массива — массивы могут расширяться / уменьшаться во время выполнения.
Его синтаксис выглядит следующим образом —
Синтаксис
array_name[index] = value
Где array_name — имя массива, index — индекс массива, а value — любое значение, присваиваемое элементу массива.
Создание массива
Чтобы лучше понять массив, давайте создадим и получим доступ к элементам массива.
пример
[jerry]$ awk 'BEGIN { fruits["mango"] = "yellow"; fruits["orange"] = "orange" print fruits["orange"] "\n" fruits["mango"] }'
Выполнив этот код, вы получите следующий результат —
Выход
orange yellow
В приведенном выше примере мы объявляем массив как фрукты , индекс которых является именем фруктов, а значение является цветом фруктов. Для доступа к элементам массива мы используем формат array_name [index] .
Удаление элементов массива
Для вставки мы использовали оператор присваивания. Точно так же мы можем использовать оператор delete для удаления элемента из массива. Синтаксис оператора удаления выглядит следующим образом:
Синтаксис
delete array_name[index]
В следующем примере удаляется оранжевый элемент. Следовательно, команда не показывает никакого вывода.
пример
[jerry]$ awk 'BEGIN { fruits["mango"] = "yellow"; fruits["orange"] = "orange"; delete fruits["orange"]; print fruits["orange"] }'
Многомерные массивы
AWK поддерживает только одномерные массивы. Но вы можете легко смоделировать многомерный массив, используя сам одномерный массив.
Например, ниже приведен трехмерный массив 3х3 —
100 200 300 400 500 600 700 800 900
В вышеприведенном примере массив [0] [0] хранит 100, массив [0] [1] хранит 200 и так далее. Чтобы сохранить 100 в массиве [0] [0], мы можем использовать следующий синтаксис —
Синтаксис
array["0,0"] = 100
Хотя мы указали 0,0 как индекс, это не два индекса. На самом деле это всего один индекс со строкой 0,0 .
В следующем примере имитируется двумерный массив:
пример
[jerry]$ awk 'BEGIN { array["0,0"] = 100; array["0,1"] = 200; array["0,2"] = 300; array["1,0"] = 400; array["1,1"] = 500; array["1,2"] = 600; # print array elements print "array[0,0] = " array["0,0"]; print "array[0,1] = " array["0,1"]; print "array[0,2] = " array["0,2"]; print "array[1,0] = " array["1,0"]; print "array[1,1] = " array["1,1"]; print "array[1,2] = " array["1,2"]; }'
Выполнив этот код, вы получите следующий результат —
Выход
array[0,0] = 100 array[0,1] = 200 array[0,2] = 300 array[1,0] = 400 array[1,1] = 500 array[1,2] = 600
Вы также можете выполнять различные операции над массивом, такие как сортировка его элементов / индексов. Для этого вы можете использовать функции сортировки и сортировки
AWK — Контроль потока
Как и другие языки программирования, AWK предоставляет условные операторы для управления потоком программы. В этой главе объясняются управляющие операторы AWK с подходящими примерами.
Если заявление
Он просто проверяет состояние и выполняет определенные действия в зависимости от условия. Ниже приведен синтаксис оператора if —
Синтаксис
if (condition) action
Мы также можем использовать пару фигурных скобок, как указано ниже, для выполнения нескольких действий:
Синтаксис
if (condition) { action-1 action-1 . . action-n }
Например, следующий пример проверяет, является ли число четным или нет —
пример
[jerry]$ awk 'BEGIN {num = 10; if (num % 2 == 0) printf "%d is even number.\n", num }'
Выполнив приведенный выше код, вы получите следующий результат —
Выход
10 is even number.
Если еще заявление
В синтаксисе if-else мы можем предоставить список действий, которые должны быть выполнены, когда условие становится ложным.
Синтаксис оператора if-else следующий:
Синтаксис
if (condition) action-1 else action-2
В приведенном выше синтаксисе действие-1 выполняется, когда условие оценивается как истинное, а действие-2 выполняется, когда условие оценивается как ложное. Например, следующий пример проверяет, является ли число четным или нет —
пример
[jerry]$ awk 'BEGIN { num = 11; if (num % 2 == 0) printf "%d is even number.\n", num; else printf "%d is odd number.\n", num }'
Выполнив этот код, вы получите следующий результат —
Выход
11 is odd number.
If-Else-If Лестница
Мы можем легко создать лестницу if-else-if , используя несколько операторов if-else . Следующий пример демонстрирует это —
пример
[jerry]$ awk 'BEGIN { a = 30; if (a==10) print "a = 10"; else if (a == 20) print "a = 20"; else if (a == 30) print "a = 30"; }'
Выполнив этот код, вы получите следующий результат —
Выход
a = 30
AWK — Петли
Эта глава объясняет циклы AWK на подходящем примере. Циклы используются для повторного выполнения набора действий. Выполнение цикла продолжается до тех пор, пока условие цикла выполняется.
Для петли
Синтаксис цикла for —
Синтаксис
for (initialization; condition; increment/decrement) action
Сначала оператор for выполняет действие инициализации, затем проверяет условие. Если условие истинно, он выполняет действия, после чего выполняет операцию увеличения или уменьшения. Выполнение цикла продолжается до тех пор, пока условие выполняется. Например, следующий пример печатает от 1 до 5, используя цикл for —
пример
[jerry]$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'
Выполнив этот код, вы получите следующий результат —
Выход
1 2 3 4 5
Пока петля
Цикл while продолжает выполнять действие до тех пор, пока конкретное логическое условие не станет истинным. Вот синтаксис цикла while —
Синтаксис
while (condition) action
AWK сначала проверяет состояние; если условие истинно, выполняется действие. Этот процесс повторяется до тех пор, пока условие цикла оценивается как true. Например, следующий пример печатает от 1 до 5, используя цикл while —
пример
[jerry]$ awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'
Выполнив этот код, вы получите следующий результат —
Выход
1 2 3 4 5
Do-While Loop
Цикл do- while похож на цикл while, за исключением того, что условие теста оценивается в конце цикла. Вот синтаксис цикла do- while —
Синтаксис
do action while (condition)
В цикле do- while оператор действия выполняется хотя бы один раз, даже если оператор условия оценивается как ложный. Например, следующий пример печатает от 1 до 5 чисел, используя цикл do- while —
пример
[jerry]$ awk 'BEGIN {i = 1; do { print i; ++i } while (i < 6) }'
Выполнив этот код, вы получите следующий результат —
Выход
1 2 3 4 5
Перерыв Заявление
Как следует из названия, он используется для завершения выполнения цикла. Вот пример, который завершает цикл, когда сумма становится больше 50.
пример
[jerry]$ awk 'BEGIN { sum = 0; for (i = 0; i < 20; ++i) { sum += i; if (sum > 50) break; else print "Sum =", sum } }'
Выполнив этот код, вы получите следующий результат —
Выход
Sum = 0 Sum = 1 Sum = 3 Sum = 6 Sum = 10 Sum = 15 Sum = 21 Sum = 28 Sum = 36 Sum = 45
Продолжить заявление
Оператор continue используется внутри цикла, чтобы перейти к следующей итерации цикла. Это полезно, когда вы хотите пропустить обработку некоторых данных внутри цикла. Например, следующий пример использует оператор continue для печати четных чисел от 1 до 20.
пример
[jerry]$ awk 'BEGIN { for (i = 1; i <= 20; ++i) { if (i % 2 == 0) print i ; else continue } }'
Выполнив этот код, вы получите следующий результат —
Выход
2 4 6 8 10 12 14 16 18 20
Заявление о выходе
Он используется для остановки выполнения скрипта. Он принимает целое число в качестве аргумента, который является кодом состояния выхода для процесса AWK. Если аргумент не указан, выход возвращает нулевой статус. Вот пример, который останавливает выполнение, когда сумма становится больше 50.
пример
[jerry]$ awk 'BEGIN { sum = 0; for (i = 0; i < 20; ++i) { sum += i; if (sum > 50) exit(10); else print "Sum =", sum } }'
Выход
Выполнив этот код, вы получите следующий результат —
Sum = 0 Sum = 1 Sum = 3 Sum = 6 Sum = 10 Sum = 15 Sum = 21 Sum = 28 Sum = 36 Sum = 45
Давайте проверим статус возврата скрипта.
пример
[jerry]$ echo $?
Выполнив этот код, вы получите следующий результат —
Выход
10
AWK — Встроенные функции
AWK имеет ряд встроенных функций, которые всегда доступны программисту. В этой главе описываются арифметические, строковые, временные, битовые манипуляции и другие разные функции с подходящими примерами.
S.No. | Встроенные функции и описание |
---|---|
1 | Арифметические функции
AWK имеет следующие встроенные арифметические функции. |
2 | Строковые функции
AWK имеет следующие встроенные функции String. |
3 | Функции времени
AWK имеет следующие встроенные функции времени. |
4 | Функции управления битами
AWK имеет следующие встроенные функции управления битами. |
5 | Разные функции
AWK имеет следующие разные функции. |
AWK имеет следующие встроенные арифметические функции.
AWK имеет следующие встроенные функции String.
AWK имеет следующие встроенные функции времени.
AWK имеет следующие встроенные функции управления битами.
AWK имеет следующие разные функции.
AWK — пользовательские функции
Функции являются основными строительными блоками программы. AWK позволяет нам определять наши собственные функции. Большая программа может быть разделена на функции, и каждая функция может быть написана / протестирована независимо. Это обеспечивает возможность повторного использования кода.
Ниже приведен общий формат пользовательской функции —
Синтаксис
function function_name(argument1, argument2, ...) { function body }
В этом синтаксисе имя_функции — это имя пользовательской функции. Имя функции должно начинаться с буквы, а остальные символы могут быть любой комбинацией цифр, букв или символов подчеркивания. Резервные слова AWK нельзя использовать в качестве имен функций.
Функции могут принимать несколько аргументов, разделенных запятой. Аргументы не обязательны. Вы также можете создать пользовательскую функцию без каких-либо аргументов.
Тело функции состоит из одного или нескольких операторов AWK.
Напишем две функции, которые вычисляют минимальное и максимальное число, и вызовем эти функции из другой функции, называемой main . Файл functions.awk содержит —
пример
# Returns minimum number function find_min(num1, num2){ if (num1 < num2) return num1 return num2 } # Returns maximum number function find_max(num1, num2){ if (num1 > num2) return num1 return num2 } # Main function function main(num1, num2){ # Find minimum number result = find_min(10, 20) print "Minimum =", result # Find maximum number result = find_max(10, 20) print "Maximum =", result } # Script execution starts here BEGIN { main(10, 20) }
Выполнив этот код, вы получите следующий результат —
Выход
Minimum = 10 Maximum = 20
AWK — перенаправление вывода
Пока что мы выводим данные на стандартный поток вывода. Мы также можем перенаправить данные в файл. Перенаправление появляется после оператора print или printf . Перенаправления в AWK записываются так же, как перенаправление в командах оболочки, за исключением того, что они записываются в программе AWK. В этой главе объясняется перенаправление с подходящими примерами.
Оператор перенаправления
Синтаксис оператора перенаправления —
Синтаксис
print DATA > output-file
Он записывает данные в выходной файл . Если выходной файл не существует, он создает его. Когда используется этот тип перенаправления, выходной файл стирается до того, как в него будет записан первый вывод. Последующие операции записи в тот же выходной файл не стирают выходной файл, а добавляют к нему. Например, следующий пример пишет Hello, World !!! в файл.
Давайте создадим файл с некоторыми текстовыми данными.
пример
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Выполнив этот код, вы получите следующий результат —
Выход
Old data
Теперь давайте перенаправим некоторое содержимое в него с помощью оператора перенаправления AWK.
пример
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Выполнив этот код, вы получите следующий результат —
Выход
Hello, World !!!
Добавить оператора
Синтаксис оператора добавления выглядит следующим образом:
Синтаксис
print DATA >> output-file
Он добавляет данные в выходной файл . Если выходной файл не существует, он создает его. Когда используется этот тип перенаправления, новое содержимое добавляется в конец файла. Например, следующий пример добавляет Hello, World !!! в файл.
Давайте создадим файл с некоторыми текстовыми данными.
пример
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Выполнив этот код, вы получите следующий результат —
Выход
Old data
Теперь давайте добавим к нему некоторое содержимое, используя оператор дополнения AWK.
пример
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Выполнив этот код, вы получите следующий результат —
Выход
Old data Hello, World !!!
труба
Можно отправить вывод в другую программу через канал вместо использования файла. Это перенаправление открывает канал для команды и записывает значения элементов через этот канал в другой процесс для выполнения команды. Команда аргумента перенаправления на самом деле является выражением AWK. Вот синтаксис трубы —
Синтаксис
print items | command
Давайте использовать команду tr для преобразования строчных букв в прописные.
пример
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
Выполнив этот код, вы получите следующий результат —
Выход
HELLO, WORLD !!!
Двухстороннее общение
AWK может общаться с внешним процессом с помощью | & , который является двусторонней связью. Например, в следующем примере команда tr используется для преобразования строчных букв в прописные. Наш файл command.awk содержит —
пример
BEGIN { cmd = "tr [a-z] [A-Z]" print "hello, world !!!" |& cmd close(cmd, "to") cmd |& getline out print out; close(cmd); }
Выполнив этот код, вы получите следующий результат —
Выход
HELLO, WORLD !!!
Сценарий выглядит загадочно? Позвольте нам демистифицировать это.
-
Первое утверждение, cmd = «tr [az] [AZ]» , является командой, с которой мы устанавливаем двустороннюю связь из AWK.
-
Следующий оператор, т. Е. Команда print, обеспечивает ввод команды tr . Здесь & | указывает на двустороннюю связь.
-
Третье утверждение, то есть close (cmd, «to») , закрывает процесс после завершения его выполнения.
-
Следующий оператор cmd | & getline out сохраняет вывод в переменную out с помощью функции getline.
-
Следующая инструкция print печатает вывод, и, наконец, функция close закрывает команду.
Первое утверждение, cmd = «tr [az] [AZ]» , является командой, с которой мы устанавливаем двустороннюю связь из AWK.
Следующий оператор, т. Е. Команда print, обеспечивает ввод команды tr . Здесь & | указывает на двустороннюю связь.
Третье утверждение, то есть close (cmd, «to») , закрывает процесс после завершения его выполнения.
Следующий оператор cmd | & getline out сохраняет вывод в переменную out с помощью функции getline.
Следующая инструкция print печатает вывод, и, наконец, функция close закрывает команду.
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 }'
Выполнив этот код, вы получите следующий результат —
Выход