Команда awk – примеры использования в Linux и Unix
В этом базовом руководстве вы узнаете самые основы команды awk , а также увидите некоторые способы её использования при работе с текстом, включая вывод содержимого файла, а также его конкретных столбцов, строк и слов по указанным критериям. Приступим!
Что это за команда awk?
AWK – это скриптовый язык, который полезен при работе в командной строке и широко применяется для обработки текста.
При использовании awk вы можете выбирать данные – один или более отдельных фрагментов текста – на основе заданного критерия. Например, с помощью awk можно выполнять поиск конкретного слова или шаблона во фрагменте текста, а также выбирать определённую строку/столбец в файле.
Базовый синтаксис awk
Простейшая форма команды awk подразумевает описание основного действия в одинарных кавычках и фигурных скобках с указанием после него целевого файла.
Выглядеть она может так:
Когда вам нужно найти текст, соответствующий конкретному шаблону, или же конкретное слово в тексте, команда принимает следующий вид:
Создание образца файла
Для создания файла в командной строке используется команда touch . Например: touch filename.txt , где filename – это произвольное имя файла.
Затем можно с помощью команды open ( open filename.txt ) запустить обработчик текста вроде TextEdit, который позволит внести в файл нужное содержимое.
Предположим, у вас есть текстовый файл information.txt, содержащий данные, разделённые по столбцам.
Выглядеть этот файл может так:
В приведённом примере мы видим по одному столбцу для
firstName , lastName , age , city и ID .
В любой момент можно просмотреть вывод содержимого вашего файла, выполнив cat text_file , где text_file представляет имя файла.
Вывод всего содержимого файла
Для вывода всего содержимого файла в качестве действия в фигурных скобках нужно указать print $0 .
Сработает эта команда аналогично ранее упомянутой cat .
Если захотите добавить нумерацию строк, то нужно будет дополнить действие переменной NR :
Вывод конкретных столбцов
При использовании awk можно указывать для вывода конкретные столбцы.
Вывод первого производится следующей командой:
Здесь $1 означает первое поле, то есть в данном случае первый столбец.
Для вывода второго столбца используется $2 :
По умолчанию начало и конец каждого столбца awk определяет по пробелу.
Для вывода большего числа столбцов, например, первого и четвёртого, нужно выполнить:
Здесь $1 представляет первое поле ввода (первый столбец), а $4 четвёртое. При этом они отделяются запятой, чтобы вывод разделялся пробелом и был более читаемым.
Для вывода последнего поля (последнего столбца) также можно использовать команду $NF , представляющую последнее поле записи:
Вывод конкретных строк столбца
Также можно указывать для вывода строку определённого столбца:
Разделим эту команду на две части. Сначала awk ‘
Для вывода двух строк команда будет такой:
Вывод строк с заданным шаблоном
Вы можете выводить строку, начинающуюся с заданной буквы. Например:
Эта команда выбирает все строки с текстом, начинающимся на O .
Действие команды начинается с символа ^ , который указывает на начало строки. После этого прописывается буква, с которой нужная вам строка должна начинаться.
По аналогичному принципу можно выводить строку, завершающуюся конкретным шаблоном:
Эта команда выводит строки, оканчивающиеся на 0 – здесь с помощью символа $ мы указываем, как должна заканчиваться нужная строка.
При этом её можно несколько изменить:
Символ ! используется в качестве приставки «НЕ», а значит, в этом случае будут выбраны строки, которые не оканчиваются на 0 .
Использование регулярных выражений
Для вывода слов, содержащих определённые буквы, а также слов, соответствующих указанному шаблону, мы снова используем прямые слэши.
К примеру, если нас интересуют слова, содержащие io , мы пишем:
Мы получили строки, в которых содержатся слова, содержащие io .
Теперь предположим, что в файле есть дополнительный столбец department :
Для поиска всей информации о людях, работающих в IT , нужно указать искомую строку между // :
А что, если мы хотим увидеть только имена и фамилии сотрудников из IT ?
Тогда можно указать столбец так:
В этом случае отобразятся только первый и второй столбцы строк, содержащих IT .
При поиске слов, содержащих конкретный шаблон, бывают случаи, когда требуется использовать экранирующий символ:
Я хотела найти строки, оканчивающиеся на N/A . Поэтому при указании критериев поиска в ‘ // ‘ , как это показывалось выше, мне пришлось использовать между N/A символ перехода \ . В противном случае возникла бы ошибка.
Использование операторов сравнения
Если вы, предположим, захотите найти всю информацию о сотрудниках в возрасте до 40 лет, то нужно будет использовать оператор сравнения < так:
В выводе представлена информация о людях моложе 40.
Заключение
Вот и всё. Теперь у вас есть необходимая основа для начала работы с awk и управления текстовыми данными.
содержание
Awk — это мощный инструмент для анализа текста. По сравнению с поиском с помощью grep и редактированием sed, awk особенно эффективен, когда он анализирует данные и создает отчеты. Проще говоря, awk читает файл построчно, нарезает каждую строку пробелом в качестве разделителя по умолчанию и выполняет различный анализ и обработку вырезанной части. По сравнению с преимуществами обработки экрана, при обработке больших файлов не будет проблем с переполнением памяти или медленной обработкой, и она обычно используется для форматирования текстовой информации.
awk процесс
Обработайте каждую строку по очереди, а затем выведите
форма команды awk
объяснение параметра команды awk
- [-F | -f | -v] Большие параметры, где -F указывает разделитель; -f вызывает скрипт; -v определяет переменную var = value
- ’’ Блок кода котировки
- BEGIN блок кода инициализации, перед обработкой каждой строки, код инициализации, в основном относится к глобальным переменным, установите разделитель FS
- // Соответствует блоку кода, который может быть строкой или регулярным выражением
- <> блок кода команды, содержит одну или несколько команд
- ; Несколько команд разделяются точкой с запятой
- КОНЕЧНЫЙ конечный блок кода, кодовый блок, который выполняется после обработки каждой строки, в основном для окончательного расчета или сводной информации о конце вывода.
Встроенные переменные AWK. Awk имеет множество встроенных переменных для установки информации о среде. Эти переменные можно изменять. Некоторые из наиболее часто используемых переменных приведены ниже.
FNR просмотр файла количество записей
Специальные точки awk / встроенные переменные
распечатать основную команду для печати указанного содержимого
$ 0 представляет всю текущую строку или содержимое всего файла.
$ 1 первое поле каждой строки
\ t Tab
\ n разрыв строки
совпадение, а не точное сравнение с ==
!
Нет совпадений, неточное сравнение
== равны, все должны быть равны, точное сравнение
! = Не равно, точное сравнение
&& логический и
|| логическое ИЛИ
+ означает 1 или более при сопоставлении
/ [0-9] [0-9] + / Два или более чисел
/ [0-9] [0-9] * / Одно или несколько чисел
-F ’[: # /]’ Указанный разделитель / строка / регулярное выражение Здесь необходимо определить три разделителя
Переменная количества поля NF
NR Количество записей в каждой строке, многофайловые записи увеличиваются
FNR похож на NR, но многофайловые записи не увеличиваются, и каждый файл начинается с 1
Определить разделитель, когда FS BEGIN
Разделитель полей вывода OFS, по умолчанию также используется пробел, его можно изменить на табуляцию и т. д.
Разделитель входных записей RS, по умолчанию используется разрыв строки (то есть текст вводится построчно)
Разделитель записей, выводимый ORS, по умолчанию — символ новой строки, то есть результат обработки также выводится на экран построчно.
Количество параметров командной строки ARGC
Расположение параметров командной строки ARGV
ENVIRON поддерживает использование системных переменных среды в очереди.
FILENAME Имя файла, просматриваемое 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) следующим образом:
Точно так же, чтобы установить AWK в GNU / Linux на основе RPM, используйте менеджер пакетов Yellowdog Updator Modifier yum следующим образом:
После установки убедитесь, что AWK доступен через командную строку.
Выполнив приведенный выше код, вы получите следующий результат –
Установка из исходного кода
Поскольку GNU AWK является частью проекта GNU, его исходный код доступен для бесплатной загрузки. Мы уже видели, как установить AWK с помощью менеджера пакетов. Давайте теперь поймем, как установить AWK из его исходного кода.
Следующая установка применима к любому программному обеспечению GNU / Linux, а также к большинству других свободно доступных программ. Вот шаги установки –
Шаг 1 – Загрузите исходный код из аутентичного места. Утилита командной строки wget служит для этой цели.
Шаг 2 – Распакуйте и извлеките загруженный исходный код.
Шаг 3 – Перейдите в каталог и запустите configure.
Шаг 4 – После успешного завершения конфигурирование генерирует Makefile. Чтобы скомпилировать исходный код, введите команду make .
Шаг 5 – Вы можете запустить набор тестов, чтобы убедиться, что сборка чистая. Это необязательный шаг.
Шаг 6 – Наконец, установите AWK. Убедитесь, что у вас есть привилегии суперпользователя.
Вот и все! Вы успешно скомпилировали и установили AWK. Проверьте это, выполнив команду awk следующим образом:
Выполнив этот код, вы получите следующий результат –
AWK – рабочий процесс
Чтобы стать опытным программистом на AWK, вам необходимо знать его внутреннее устройство. AWK следует простому рабочему процессу – чтение, выполнение и повторение. Следующая диаграмма изображает рабочий процесс AWK –

Читать
AWK читает строку из входного потока (файл, канал или стандартный ввод) и сохраняет ее в памяти.
казнить
Все команды AWK применяются последовательно на входе. По умолчанию AWK выполняет команды в каждой строке. Мы можем ограничить это, предоставляя шаблоны.
Повторение
Этот процесс повторяется, пока файл не достигнет своего конца.
Структура программы
Давайте теперь разберемся со структурой программы AWK.
НАЧАЛО блока
Синтаксис блока BEGIN следующий:
Блок BEGIN выполняется при запуске программы. Это выполняется только один раз. Это хорошее место для инициализации переменных. BEGIN – это ключевое слово AWK, поэтому оно должно быть в верхнем регистре. Обратите внимание, что этот блок не является обязательным.
Блок кузова
Синтаксис блока тела выглядит следующим образом:
Блок body применяет команды AWK к каждой строке ввода. По умолчанию AWK выполняет команды в каждой строке. Мы можем ограничить это, предоставляя шаблоны. Обратите внимание, что для блока Body нет ключевых слов.
END Block
Синтаксис блока END следующий:
Блок END выполняется в конце программы. END – это ключевое слово AWK, поэтому оно должно быть в верхнем регистре. Обратите внимание, что этот блок не является обязательным.
Давайте создадим файл marks.txt, который содержит серийный номер, имя учащегося, имя субъекта и количество полученных оценок.
Давайте теперь отобразим содержимое файла с заголовком, используя скрипт AWK.
Когда этот код выполняется, он дает следующий результат –
В начале AWK печатает заголовок из блока BEGIN. Затем в блоке body он читает строку из файла и выполняет команду печати AWK, которая просто печатает содержимое в стандартном потоке вывода. Этот процесс повторяется, пока файл не достигнет конца.
AWK – основной синтаксис
AWK прост в использовании. Мы можем предоставить команды AWK либо непосредственно из командной строки, либо в виде текстового файла, содержащего команды AWK.
Командная строка AWK
Мы можем указать команду AWK в одинарных кавычках в командной строке, как показано ниже:
пример
Рассмотрим текстовый файл marks.txt со следующим содержанием –
Давайте отобразим полное содержимое файла, используя AWK, следующим образом:
Выполнив этот код, вы получите следующий результат –
Файл программы AWK
Мы можем предоставить команды AWK в файле сценария, как показано ниже:
Сначала создайте текстовый файл command.awk, содержащий команду AWK, как показано ниже –
Теперь мы можем дать команду AWK прочитать команды из текстового файла и выполнить действие. Здесь мы достигаем того же результата, что и в приведенном выше примере.
Выполнив этот код, вы получите следующий результат –
AWK Стандартные Опции
AWK поддерживает следующие стандартные параметры, которые могут быть предоставлены из командной строки.
Опция -v
Эта опция присваивает значение переменной. Это позволяет присваивать перед выполнением программы. В следующем примере описано использование параметра -v.
Выполнив этот код, вы получите следующий результат –
Опция –dump-variable [= file]
Он печатает отсортированный список глобальных переменных и их окончательных значений в файл. Файл по умолчанию – awkvars.out .
Выполнив приведенный выше код, вы получите следующий результат –
Опция –help
Эта опция выводит справочное сообщение на стандартный вывод.
Выполнив этот код, вы получите следующий результат –
Опция –lint [= fatal]
Эта опция позволяет проверять непереносимые или сомнительные конструкции. Когда указан фатальный аргумент, предупреждающие сообщения рассматриваются как ошибки. Следующий пример демонстрирует это –
Выполнив этот код, вы получите следующий результат –
Опция –posix
Эта опция включает строгую совместимость с POSIX, в которой отключены все общие и специфичные для gawk расширения.
Опция –profile [= file]
Эта опция генерирует печатную версию программы в файле. Файл по умолчанию – awkprof.out . Ниже простой пример иллюстрирует это –
Выполнив этот код, вы получите следующий результат –
Опция –traditional
Эта опция отключает все специфичные для gawk расширения.
Опция –version
Эта опция отображает информацию о версии программы AWK.
Когда этот код выполняется, он дает следующий результат –
AWK – Основные примеры
Эта глава описывает несколько полезных команд AWK и их соответствующие примеры. Рассмотрим текстовый файл marks.txt для обработки со следующим содержимым:
Печать столбца или поля
Вы можете настроить AWK на печать только определенных столбцов из поля ввода. Следующий пример демонстрирует это –
пример
Выполнив этот код, вы получите следующий результат –
Выход
В файле marks.txt третий столбец содержит имя субъекта, а четвертый столбец содержит оценки, полученные по конкретному предмету. Давайте распечатаем эти два столбца с помощью команды печати AWK. В приведенном выше примере $ 3 и $ 4 представляют третье и четвертое поля соответственно из входной записи.
Печать всех строк
По умолчанию AWK печатает все строки, которые соответствуют шаблону.
пример
Выполнив этот код, вы получите следующий результат –
Выход
В приведенном выше примере мы ищем шаблон формы a . Когда сопоставление с образцом завершается успешно, он выполняет команду из блока body. При отсутствии блока тела – выполняется действие по умолчанию, которое заключается в печати записи. Следовательно, следующая команда дает тот же результат –
пример
Печать столбцов по шаблону
Когда совпадение с образцом завершается успешно, AWK печатает всю запись по умолчанию. Но вы можете настроить AWK на печать только определенных полей. Например, следующий пример печатает третье и четвертое поле, когда совпадение с образцом завершается успешно.
пример
Выполнив этот код, вы получите следующий результат –
Выход
Печать колонки в любом порядке
Вы можете печатать столбцы в любом порядке. Например, в следующем примере печатается четвертый столбец, за которым следует третий столбец.
пример
Выполнив приведенный выше код, вы получите следующий результат –
Выход
Подсчет и печать совмещенного рисунка
Давайте посмотрим пример, где вы можете посчитать и напечатать количество строк, для которых совпадение с образцом прошло успешно.
пример
Выполнив этот код, вы получите следующий результат –
Выход
В этом примере мы увеличиваем значение счетчика при успешном совпадении с шаблоном и печатаем это значение в блоке END. Обратите внимание, что в отличие от других языков программирования, нет необходимости объявлять переменную перед ее использованием.
Печать строк с более чем 18 символами
Давайте печатать только те строки, которые содержат более 18 символов.
пример
Выполнив этот код, вы получите следующий результат –
Выход
AWK предоставляет встроенную функцию длины, которая возвращает длину строки. Переменная $ 0 хранит всю строку, и при отсутствии блока тела выполняется действие по умолчанию, то есть действие печати. Следовательно, если строка содержит более 18 символов, то результаты сравнения верны, и строка печатается.
AWK – встроенные переменные
AWK предоставляет несколько встроенных переменных. Они играют важную роль при написании сценариев AWK. Эта глава демонстрирует использование встроенных переменных.
Стандартные переменные AWK
Стандартные переменные AWK обсуждаются ниже.
Это подразумевает количество аргументов, представленных в командной строке.
Выполнив этот код, вы получите следующий результат –
Но почему AWK показывает 5, когда вы передали только 4 аргумента? Просто проверьте следующий пример, чтобы очистить ваши сомнения.
Это массив, в котором хранятся аргументы командной строки. Допустимый индекс массива – от 0 до ARGC-1.
Выполнив этот код, вы получите следующий результат –
CONVFMT
Он представляет формат преобразования для чисел. Его значение по умолчанию % .6g .
ЭНВАЙРОН
Это ассоциативный массив переменных среды.
Выполнив этот код, вы получите следующий результат –
Чтобы найти имена других переменных среды, используйте команду env .
ИМЯ ФАЙЛА
Он представляет текущее имя файла.
Выполнив этот код, вы получите следующий результат –
Обратите внимание, что FILENAME не определен в блоке BEGIN.
Он представляет собой (входной) разделитель полей, и его значением по умолчанию является пробел. Вы также можете изменить это, используя параметр командной строки -F .
Выполнив этот код, вы получите следующий результат –
Он представляет количество полей в текущей записи. Например, в следующем примере печатаются только те строки, которые содержат более двух полей.
Выполнив этот код, вы получите следующий результат –
Он представляет номер текущей записи. Например, следующий пример печатает запись, если номер текущей записи меньше трех.
Выполнив этот код, вы получите следующий результат –
Это похоже на NR, но относительно текущего файла. Это полезно, когда AWK работает с несколькими файлами. Значение FNR сбрасывается с новым файлом.
Он представляет номер выходного формата, и его значением по умолчанию является % .6g .
Он представляет разделитель выходного поля, и его значением по умолчанию является пробел.
Выполнив этот код, вы получите следующий результат –
Он представляет разделитель выходных записей, и его значением по умолчанию является перевод строки.
Выполнив приведенный выше код, вы получите следующий результат –
RLENGTH
Он представляет длину строки, сопоставленной функцией соответствия. Функция соответствия AWK ищет данную строку во входной строке.
Выполнив этот код, вы получите следующий результат –
Он представляет (входной) разделитель записей, и его значением по умолчанию является перевод строки.
Выполнив этот код, вы получите следующий результат –
RSTART
Он представляет первую позицию в строке, сопоставленной функцией соответствия.
Выполнив этот код, вы получите следующий результат –
SUBSEP
Он представляет символ разделителя для индексов массива, и его значение по умолчанию равно \ 034 .
Выполнив этот код, вы получите следующий результат –
Он представляет всю входную запись.
Выполнив этот код, вы получите следующий результат –
Он представляет n- е поле в текущей записи, где поля разделены символом FS.
Выполнив этот код, вы получите следующий результат –
GNU AWK Конкретные переменные
GNU AWK конкретные переменные являются следующими –
ARGIND
Он представляет индекс в ARGV текущего обрабатываемого файла.
Выполнив этот код, вы получите следующий результат –
BINMODE
Он используется для указания двоичного режима для всех файловых операций ввода-вывода в системах, не поддерживающих POSIX. Числовые значения 1, 2 или 3 указывают, что входные файлы, выходные файлы или все файлы, соответственно, должны использовать двоичный ввод / вывод. Строковые значения r или w указывают, что входные или выходные файлы, соответственно, должны использовать двоичный ввод / вывод. Строковые значения rw или wr указывают, что все файлы должны использовать двоичный ввод / вывод.
ERRNO
Строка указывает на ошибку при сбое перенаправления для getline или сбое вызова close .
Выполнив этот код, вы получите следующий результат –
FIELDWIDTHS
Задан разделенный пробелами список переменных ширины поля, GAWK анализирует входные данные в поля фиксированной ширины вместо использования значения переменной FS в качестве разделителя полей.
IGNORECASE
Когда эта переменная установлена, GAWK становится без учета регистра. Следующий пример демонстрирует это –
Выполнив этот код, вы получите следующий результат –
Он обеспечивает динамическое управление опцией –lint из программы GAWK. Когда эта переменная установлена, GAWK печатает предупреждения lint. При присвоении строкового значения фатальному предупреждения lint становятся фатальными ошибками, точно так же как –lint = fatal .
Выполнив этот код, вы получите следующий результат –
PROCINFO
Это ассоциативный массив, содержащий информацию о процессе, такую как действительные и эффективные номера UID, идентификационный номер процесса и т. Д.
Выполнив этот код, вы получите следующий результат –
ДОМЕН
Он представляет собой текстовый домен программы AWK. Он используется для поиска локализованных переводов для строк программы.
Выполнив этот код, вы получите следующий результат –
Приведенный выше вывод показывает текст на английском языке из-за локали en_IN
AWK – Операторы
Как и другие языки программирования, AWK также предоставляет большой набор операторов. В этой главе объясняются операторы AWK с подходящими примерами.
AWK поддерживает следующие арифметические операторы.
AWK поддерживает следующие операторы увеличения и уменьшения.
AWK поддерживает следующие операторы присваивания.
AWK поддерживает следующие реляционные операторы.
AWK поддерживает следующие логические операторы.
Мы можем легко реализовать выражение условия, используя тернарный оператор.
AWK поддерживает следующие унарные операторы.
Существует два формата экспоненциальных операторов.
Пробел – это оператор конкатенации строк, который объединяет две строки.
Это представлено в . Используется при доступе к элементам массива.
Этот пример объясняет две формы операторов регулярных выражений.
AWK поддерживает следующие арифметические операторы.
AWK поддерживает следующие операторы увеличения и уменьшения.
AWK поддерживает следующие операторы присваивания.
AWK поддерживает следующие реляционные операторы.
AWK поддерживает следующие логические операторы.
Мы можем легко реализовать выражение условия, используя тернарный оператор.
AWK поддерживает следующие унарные операторы.
Существует два формата экспоненциальных операторов.
Пробел – это оператор конкатенации строк, который объединяет две строки.
Это представлено в . Используется при доступе к элементам массива.
Этот пример объясняет две формы операторов регулярных выражений.
AWK – Регулярные выражения
AWK очень мощный и эффективный в обработке регулярных выражений. Ряд сложных задач можно решить с помощью простых регулярных выражений. Любой эксперт командной строки знает силу регулярных выражений.
В этой главе рассматриваются стандартные регулярные выражения с подходящими примерами.
точка
Он соответствует любому отдельному символу, кроме символа конца строки. Например, следующий пример соответствует fin, fun, fan и т. Д.
пример
Выполнив приведенный выше код, вы получите следующий результат –
Выход
Начало строки
Это соответствует началу строки. Например, в следующем примере печатаются все строки, начинающиеся с шаблона The .
пример
Выполнив этот код, вы получите следующий результат –
Выход
Конец линии
Это соответствует концу строки. Например, в следующем примере печатаются строки, заканчивающиеся буквой n .
пример
Выход
Выполнив этот код, вы получите следующий результат –
Совпадает с набором символов
Используется для соответствия только одному из нескольких символов. Например, следующий пример соответствует шаблону Call и Tall, но не Ball .
пример
Выход
Выполнив этот код, вы получите следующий результат –
Эксклюзивный набор
В эксклюзивном наборе карат сводит на нет набор символов в квадратных скобках. Например, следующий пример печатает только Ball .
пример
Выполнив этот код, вы получите следующий результат –
Выход
Внесение изменений
Вертикальная черта позволяет регулярным выражениям быть логически ИЛИ. Например, следующий пример печатает Ball and Call .
пример
Выполнив этот код, вы получите следующий результат –
Выход
Ноль или одно вхождение
Это соответствует нулю или одному вхождению предыдущего символа. Например, следующий пример соответствует цвету, а также цвет . Мы сделали вас необязательным персонажем, используя ? ,
пример
Выполнив этот код, вы получите следующий результат –
Выход
Ноль или более вхождение
Это соответствует нулю или более вхождений предыдущего символа. Например, следующий пример соответствует ca, cat, catt и так далее.
пример
Выполнив этот код, вы получите следующий результат –
Выход
Одно или несколько вхождений
Это соответствует одному или нескольким вхождениям предыдущего символа. Например, приведенный ниже пример соответствует одному или нескольким вхождениям из 2 .
пример
Выполнив приведенный выше код, вы получите следующий результат –
Выход
группирование
Круглые скобки () используются для группировки и символа | используется для альтернатив. Например, следующее регулярное выражение соответствует строкам, содержащим либо Apple Juice, либо Apple Cake .
пример
Выполнив этот код, вы получите следующий результат –
Выход
AWK – Массивы
У AWK есть ассоциативные массивы, и одно из лучших преимуществ – индексы не должны быть непрерывным набором чисел; Вы можете использовать строку или число в качестве индекса массива. Кроме того, нет необходимости заранее объявлять размер массива – массивы могут расширяться / уменьшаться во время выполнения.
Его синтаксис выглядит следующим образом –
Синтаксис
Где array_name – имя массива, index – индекс массива, а value – любое значение, присваиваемое элементу массива.
Создание массива
Чтобы лучше понять массив, давайте создадим и получим доступ к элементам массива.
пример
Выполнив этот код, вы получите следующий результат –
Выход
В приведенном выше примере мы объявляем массив как фрукты , индекс которых является именем фруктов, а значение является цветом фруктов. Для доступа к элементам массива мы используем формат array_name [index] .
Удаление элементов массива
Для вставки мы использовали оператор присваивания. Точно так же мы можем использовать оператор delete для удаления элемента из массива. Синтаксис оператора удаления выглядит следующим образом:
Синтаксис
В следующем примере удаляется оранжевый элемент. Следовательно, команда не показывает никакого вывода.
пример
Многомерные массивы
AWK поддерживает только одномерные массивы. Но вы можете легко смоделировать многомерный массив, используя сам одномерный массив.
Например, ниже приведен трехмерный массив 3х3 –
В вышеприведенном примере массив [0] [0] хранит 100, массив [0] [1] хранит 200 и так далее. Чтобы сохранить 100 в массиве [0] [0], мы можем использовать следующий синтаксис –
Синтаксис
Хотя мы указали 0,0 как индекс, это не два индекса. На самом деле это всего один индекс со строкой 0,0 .
В следующем примере имитируется двумерный массив:
пример
Выполнив этот код, вы получите следующий результат –
Выход
Вы также можете выполнять различные операции над массивом, такие как сортировка его элементов / индексов. Для этого вы можете использовать функции сортировки и сортировки
AWK – Контроль потока
Как и другие языки программирования, AWK предоставляет условные операторы для управления потоком программы. В этой главе объясняются управляющие операторы AWK с подходящими примерами.
Если заявление
Он просто проверяет состояние и выполняет определенные действия в зависимости от условия. Ниже приведен синтаксис оператора if –
Синтаксис
Мы также можем использовать пару фигурных скобок, как указано ниже, для выполнения нескольких действий:
Синтаксис
Например, следующий пример проверяет, является ли число четным или нет –
пример
Выполнив приведенный выше код, вы получите следующий результат –
Выход
Если еще заявление
В синтаксисе if-else мы можем предоставить список действий, которые должны быть выполнены, когда условие становится ложным.
Синтаксис оператора if-else следующий:
Синтаксис
В приведенном выше синтаксисе действие-1 выполняется, когда условие оценивается как истинное, а действие-2 выполняется, когда условие оценивается как ложное. Например, следующий пример проверяет, является ли число четным или нет –
пример
Выполнив этот код, вы получите следующий результат –
Выход
If-Else-If Лестница
Мы можем легко создать лестницу if-else-if , используя несколько операторов if-else . Следующий пример демонстрирует это –
пример
Выполнив этот код, вы получите следующий результат –
Выход
AWK – Петли
Эта глава объясняет циклы AWK на подходящем примере. Циклы используются для повторного выполнения набора действий. Выполнение цикла продолжается до тех пор, пока условие цикла выполняется.
Для петли
Синтаксис цикла for –
Синтаксис
Сначала оператор for выполняет действие инициализации, затем проверяет условие. Если условие истинно, он выполняет действия, после чего выполняет операцию увеличения или уменьшения. Выполнение цикла продолжается до тех пор, пока условие выполняется. Например, следующий пример печатает от 1 до 5, используя цикл for –
пример
Выполнив этот код, вы получите следующий результат –
Выход
Пока петля
Цикл while продолжает выполнять действие до тех пор, пока конкретное логическое условие не станет истинным. Вот синтаксис цикла while –
Синтаксис
AWK сначала проверяет состояние; если условие истинно, выполняется действие. Этот процесс повторяется до тех пор, пока условие цикла оценивается как true. Например, следующий пример печатает от 1 до 5, используя цикл while –
пример
Выполнив этот код, вы получите следующий результат –
Выход
Do-While Loop
Цикл do- while похож на цикл while, за исключением того, что условие теста оценивается в конце цикла. Вот синтаксис цикла do- while –
Синтаксис
В цикле do- while оператор действия выполняется хотя бы один раз, даже если оператор условия оценивается как ложный. Например, следующий пример печатает от 1 до 5 чисел, используя цикл do- while –
пример
Выполнив этот код, вы получите следующий результат –
Выход
Перерыв Заявление
Как следует из названия, он используется для завершения выполнения цикла. Вот пример, который завершает цикл, когда сумма становится больше 50.
пример
Продолжить заявление
Оператор continue используется внутри цикла, чтобы перейти к следующей итерации цикла. Это полезно, когда вы хотите пропустить обработку некоторых данных внутри цикла. Например, следующий пример использует оператор continue для печати четных чисел от 1 до 20.
пример
Выполнив этот код, вы получите следующий результат –
Выход
Заявление о выходе
Он используется для остановки выполнения скрипта. Он принимает целое число в качестве аргумента, который является кодом состояния выхода для процесса AWK. Если аргумент не указан, выход возвращает нулевой статус. Вот пример, который останавливает выполнение, когда сумма становится больше 50.
пример
Давайте проверим статус возврата скрипта.
пример
Выполнив этот код, вы получите следующий результат –
Выход
AWK – Встроенные функции
AWK имеет ряд встроенных функций, которые всегда доступны программисту. В этой главе описываются арифметические, строковые, временные, битовые манипуляции и другие разные функции с подходящими примерами.
AWK имеет следующие встроенные арифметические функции.
AWK имеет следующие встроенные функции String.
AWK имеет следующие встроенные функции времени.
AWK имеет следующие встроенные функции управления битами.
AWK имеет следующие разные функции.
AWK имеет следующие встроенные арифметические функции.
AWK имеет следующие встроенные функции String.
AWK имеет следующие встроенные функции времени.
AWK имеет следующие встроенные функции управления битами.
AWK имеет следующие разные функции.
AWK – пользовательские функции
Функции являются основными строительными блоками программы. AWK позволяет нам определять наши собственные функции. Большая программа может быть разделена на функции, и каждая функция может быть написана / протестирована независимо. Это обеспечивает возможность повторного использования кода.
Ниже приведен общий формат пользовательской функции –
Синтаксис
В этом синтаксисе имя_функции – это имя пользовательской функции. Имя функции должно начинаться с буквы, а остальные символы могут быть любой комбинацией цифр, букв или символов подчеркивания. Резервные слова AWK нельзя использовать в качестве имен функций.
Функции могут принимать несколько аргументов, разделенных запятой. Аргументы не обязательны. Вы также можете создать пользовательскую функцию без каких-либо аргументов.
Тело функции состоит из одного или нескольких операторов AWK.
Напишем две функции, которые вычисляют минимальное и максимальное число, и вызовем эти функции из другой функции, называемой main . Файл functions.awk содержит –
пример
Выполнив этот код, вы получите следующий результат –
Выход
AWK – перенаправление вывода
Пока что мы выводим данные на стандартный поток вывода. Мы также можем перенаправить данные в файл. Перенаправление появляется после оператора print или printf . Перенаправления в AWK записываются так же, как перенаправление в командах оболочки, за исключением того, что они записываются в программе AWK. В этой главе объясняется перенаправление с подходящими примерами.
Оператор перенаправления
Синтаксис оператора перенаправления –
Синтаксис
Он записывает данные в выходной файл . Если выходной файл не существует, он создает его. Когда используется этот тип перенаправления, выходной файл стирается до того, как в него будет записан первый вывод. Последующие операции записи в тот же выходной файл не стирают выходной файл, а добавляют к нему. Например, следующий пример пишет Hello, World . в файл.
Давайте создадим файл с некоторыми текстовыми данными.
пример
Выполнив этот код, вы получите следующий результат –
Выход
Теперь давайте перенаправим некоторое содержимое в него с помощью оператора перенаправления AWK.
пример
Выполнив этот код, вы получите следующий результат –
Выход
Добавить оператора
Синтаксис оператора добавления выглядит следующим образом:
Синтаксис
Он добавляет данные в выходной файл . Если выходной файл не существует, он создает его. Когда используется этот тип перенаправления, новое содержимое добавляется в конец файла. Например, следующий пример добавляет Hello, World . в файл.
Давайте создадим файл с некоторыми текстовыми данными.
пример
Выполнив этот код, вы получите следующий результат –
Выход
Теперь давайте добавим к нему некоторое содержимое, используя оператор дополнения AWK.
пример
Выполнив этот код, вы получите следующий результат –
Выход
труба
Можно отправить вывод в другую программу через канал вместо использования файла. Это перенаправление открывает канал для команды и записывает значения элементов через этот канал в другой процесс для выполнения команды. Команда аргумента перенаправления на самом деле является выражением AWK. Вот синтаксис трубы –
Синтаксис
Давайте использовать команду tr для преобразования строчных букв в прописные.
пример
Выполнив этот код, вы получите следующий результат –
Выход
Двухстороннее общение
AWK может общаться с внешним процессом с помощью | & , который является двусторонней связью. Например, в следующем примере команда tr используется для преобразования строчных букв в прописные. Наш файл command.awk содержит –
пример
Выполнив этот код, вы получите следующий результат –
Выход
Сценарий выглядит загадочно? Позвольте нам демистифицировать это.
Первое утверждение, 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:
Синтаксис
В приведенном выше синтаксисе fmt представляет собой строку спецификаций и констант формата. expr-list – это список аргументов, соответствующих спецификаторам формата.
Побег последовательности
Подобно любой строке, формат может содержать встроенные escape-последовательности. Ниже обсуждаются escape-последовательности, поддерживаемые AWK –
Новая линия
Следующий пример печатает Hello и World в отдельных строках, используя символ новой строки –
Выполнив этот код, вы получите следующий результат –
Горизонтальная вкладка
В следующем примере горизонтальная вкладка используется для отображения другого поля.
Выполнив приведенный выше код, вы получите следующий результат –
Вертикальная вкладка
В следующем примере используется вертикальная вкладка после каждого поля –
Выполнив этот код, вы получите следующий результат –
возврат на одну позицию
В следующем примере после каждого поля, кроме последнего, печатается символ возврата. Стирает последний номер из первых трех полей. Например, поле 1 отображается как поле , потому что последний символ удаляется с помощью возврата. Однако последнее поле Field 4 отображается как есть, поскольку у нас не было a \ b после поля 4 .
Выполнив этот код, вы получите следующий результат –
Возврат каретки
В следующем примере после печати каждого поля мы выполняем возврат каретки и печатаем следующее значение поверх текущего напечатанного значения. Это означает, что в конечном выводе вы видите только поле 4 , так как оно было последним, которое было напечатано поверх всех предыдущих полей.
Выполнив этот код, вы получите следующий результат –
Подача формы
В следующем примере используется подача формы после печати каждого поля.
Выполнив этот код, вы получите следующий результат –
Спецификатор формата
Как и в языке C, AWK также имеет спецификаторы формата. Версия AWK оператора printf принимает следующие форматы спецификации преобразования:
Он печатает один символ. Если аргумент, используемый для % c, является числовым, он обрабатывается как символ и печатается. В противном случае аргумент считается строкой, и печатается единственный первый символ этой строки.
Выполнив этот код, вы получите следующий результат –
% d и% i
Он печатает только целую часть десятичного числа.
Выполнив этот код, вы получите следующий результат –
% e и% E
Он печатает число с плавающей запятой в форме [-] d.dddddde [+ -] dd.
Выполнив этот код, вы получите следующий результат –
Формат % E использует E вместо e.
Выполнив этот код, вы получите следующий результат –
Он печатает число с плавающей запятой в форме [-] ddd.dddddd.
Выполнив этот код, вы получите следующий результат –
% g и% G
Использует% e или% f преобразование, в зависимости от того, что короче, с подавлением незначительных нулей.
Выполнив этот код, вы получите следующий результат –
Формат % G использует % E вместо% e.
Выполнив этот код, вы получите следующий результат –
Он печатает восьмеричное число без знака.
Выполнив этот код, вы получите следующий результат –
Он печатает десятичное число без знака.
Выполнив этот код, вы получите следующий результат –
Он печатает строку символов.
Выполнив этот код, вы получите следующий результат –
% x и% X
Он печатает шестнадцатеричное число без знака. Формат % X использует заглавные буквы вместо строчных.
Выполнив этот код, вы получите следующий результат –
Теперь давайте используем% X и наблюдаем результат –
Выполнив этот код, вы получите следующий результат –
Он печатает один символ %, и ни один аргумент не преобразуется.
Выполнив этот код, вы получите следующий результат –
Необязательные параметры с%
С % мы можем использовать следующие необязательные параметры –
ширина
Поле дополняется до ширины . По умолчанию поле заполняется пробелами, но когда используется флаг 0, оно заполняется нулями.
Выполнив этот код, вы получите следующий результат –
Ведущие нули
Ведущий ноль действует как флаг, который указывает, что выходные данные должны быть дополнены нулями вместо пробелов. Обратите внимание, что этот флаг действует только тогда, когда поле шире, чем значение для печати. Следующий пример описывает это –
Выполнив этот код, вы получите следующий результат –
Левое оправдание
Выражение должно быть выровнено по левому краю в пределах его поля. Если входная строка меньше указанного числа символов и вы хотите, чтобы она выравнивалась по левому краю, т. Е. Путем добавления пробелов справа, используйте знак минуса (-) сразу после% и перед числом.
В следующем примере выходные данные команды AWK передаются команде cat для отображения символа END OF LINE ($).
Выполнив этот код, вы получите следующий результат –
Знак префикса
Это всегда префикс числовых значений со знаком, даже если значение положительное.
Выполнив этот код, вы получите следующий результат –
гашиш
Для% o он поставляет ведущий ноль. Для% x и% X он предоставляет ведущие 0x или 0X соответственно, только если результат не равен нулю. Для% e,% E,% f и% F результат всегда содержит десятичную точку. Для% g и% G конечные нули не удаляются из результата. Следующий пример описывает это –
Что означает 0 внутри команды awk
Утилита gawk получает ввод из файлов, указанных в командной строке, или из стандартного ввода.
Аргументы
В приведенном выше примере синтаксиса программа — это программа на gawk, включаемая в командную строку.
Файл_программы — это имя файла, в котором содержится программа на gawk.
Включение программы в командную строку дает возможность писать короткие gawk-программы, не создавая отдельного файл_программы.
Чтобы оболочка не интерпретировала команды gawk как команды оболочки, программу
нужно поместить в одинарные кавычки.
Если поместить длинную или сложную программу в файл, это позволит сократить количество возможных ошибок и исключить повторный набор программы.
Список_файлов содержит путевые имена обычных файлов, обрабатываемых с помощью gawk.
Эти файлы являются файлами ввода. Если список_файлов не указан, gawk получает ввод из стандартного ввода или из источника,указанного в инструкции getline
Ключи
С ключами, перед которыми ставится двойной дефис (—), работает только утилита
gawk. При работе с awk или mawk эти ключи недоступны.
Использование fs в качестве значения разделителя полей (field separator) ввода
Чтение gawk-программы из файла по имени файл_программы, а не из командной
строки. Этот ключ можно указать в командной строке более одного раза.
Краткая справка по использованию gawk (только в gawk).
Предупреждение о потенциально ошибочных или непереносимых конструктивных элементах gawk (только в gawk).
Запуск POSIX-совместимой версии gawk. Этот ключ накладывает ряд ограничений, подробности которых даны в man-странице, посвященной gawk (тольков gawk).
Игнорирование в gawk-программе новых функций GNU, позволяющее получить
программу, совместимую с UNIX awk (только в gawk).
Присваивание значения переменной. Присваивание осуществляется еще до выполнения gawk-программы и доступно внутри шаблона BEGIN.
Этот ключ можно указать в командной строке более одного раза.
Основы языка
Программа на gawk (программа, набранная в командной строке или в файле_программы) состоит из одной и более строк, в которых содержится шаблон и (или) действие в следующем формате:
Шаблон выбирает строки из ввода. Утилита gawk выполняет действие над всеми строками, выбранными шаблоном.
Фигурные скобки, в которые заключено действие, позволяют gawk отличить его от шаблона. Если программная строка не содержит шаблона, gawk выбирает из ввода все строки.
Если программная строка не содержит действия, gawk копирует выбранные строки на стандартный вывод.
Сначала gawk сравнивает первую строку ввода (из файла, принадлежащего списку_файлов или из стандартного ввода) с каждым шаблоном программы.
Если шаблон выбирает строку (если определяется ее соответствие шаблону), gawk выполняет действие, связанное с этим шаблоном. Если строка не выбрана, gawk не выполняет действие.
Когда gawk завершит сравнение первой строки ввода, он повторяет процесс для следующей строки ввода. Он продолжает этот процесс сравнения последовательных
строк ввода, пока не прочитает весь ввод.
Если несколько шаблонов выбирают одну и ту же строку, gawk выполняет действие, связанное с каждым шаблоном, в порядке его появления в программе.
Утилита gawk может отправить на стандартный вывод одну и ту же строку ввода более одного раза.
Шаблоны
В качестве шаблона можно использовать регулярное выражение, заключенное в слэши. Оператор
проверяет, соответствует ли поле или переменная регулярному выражению.
Оператор !
проводит проверку на несоответствие. Используя операторы отношений,
перечисленные в табл ниже, можно проводить как числовое, так и строковое сравнение.
Булевые операторы || (ИЛИ) и && (И) позволяют объединять любые шаблоны.
Два уникальных шаблона, BEGIN и END, выполняют команды перед тем,
как утилита gawk приступит к обработке ввода, и после того, как она завершит эту обработку. До начала обработки всего ввода утилита gawk выполняет действия, связанные
с шаблоном BEGIN, а по окончании обработки — действия, связанные с шаблоном END
Запятая является оператором диапазона. Если два шаблона на одной
строке gawk‑программы разделены запятой, gawk выбирает диапазон строк, начиная
с первой строки, соответствующей первому шаблону. Последней строкой, выбранной
gawk, будет следующая строка из последовательности строк, соответствующая второму шаблону. Если второму шаблону не будет соответствовать ни одна строка, gawk
выберет каждую строку до конца ввода. После того как утилита gawk обнаружит соответствие второму шаблону, она возобновляет этот процесс, начиная новый поиск
соответствия первому шаблону.
Действия
Действие является частью команды gawk, заставляющее gawk выполнить это действие при обнаружении соответствия шаблону.
Если действие не указано, gawk выполняет действие по умолчанию.
В этом качестве используется команда print (которая в явном виде предоставляется как
Когда за командой print указываются аргументы, gawk выводит только их значения.
Аргументами могут быть переменные или строковые константы. Вывод команды print
можно отправить в файл (используя в gawk-программе символ >), добавить его к файлу (>>) или отправить через канал на ввод другой программы (|). Сопроцесс (|&) является двунаправленным каналом, осуществляющим обмен данными с программой, запущенной в фоновом режиме (доступен только в gawk)
Пока объекты в команде print не будут разделены запятыми, gawk проводит их объединение.
Запятые заставляют gawk разделить объекты, используя разделитель полей в выводе (OFS; как правило, в качестве разделителя используется пробел)
В одну строку могут быть включены несколько действий, разделенные точками с запятой.
Комментарии
Утилита gawk игнорирует ту часть программной строки, которая следует за знаком решетки (#).
Предваряя комментарии этим символом, можно осуществлять документирование gawk-программы.
Переменные
Хотя объявлять переменные в gawk до их применения не требуется, при желании им
можно присваивать начальные значения. Беззнаковые числовые переменные инициализируются значением 0; строковые переменные инициализируются пустой строкой.
Кроме поддержки пользовательских переменных, gawk поддерживает программные переменные.
Оба этих вида переменных (пользовательские и программные) можно использовать в тех частях gawk-программы, которые относятся к шаблонам и действиям.
Некоторые программные переменные перечислены в таблице ниже

Кроме инициализации переменных внутри программы для их инициализации
в командной строке можно воспользоваться ключом ––assign (–v).
Эта возможность пригодится в том случае, если значение переменной от запуска к запуску gawk изменяется.
Разделители Записей
По умолчанию записи во вводе и в выводе отделяются друг от друга разделителем строк.
То есть gawk принимает каждую строку ввода за отдельную запись и добавляет к концу каждой записи в выводе разделитель строк.
По умолчанию разделителями полей во вводе являются символы пробелов и табуляции, а в качестве разделителя полей в выводе используется пробел.
Значение любого разделителя можно в любое время заменить новым значением, присвоив это значение переменной либо из программы,
либо из командной строки с помощью ключа ––assign (–v).
Функции
В таблице ниже перечислены некоторые функции, предоставляемые gawk для работы с числами и строками.

Арифметические операторы
Арифметические операторы gawk, перечисленные в таблице ниже позаимствованы из языка C.
/>
/>
Ассоциативные массивы
Ассоциативный массив — одно из самых мощных средств gawk. В качестве индексов в этих массивах используются строки
Использование в качестве индексов числовых строк позволяет имитировать обычный массив.
Для присваивания значения элементу ассоциативного массива используется следующий синтаксис: