Учебники

AWK — Краткое руководство

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 Workflow

Читать

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
}'

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

Выход