- AWK: Примеры программ
- Способы запуска awk-программ
- Фильтрация строк с помощью awk
- Отбор строк, соответствующих регулярному выражению
- Отбор строк, НЕ соответствующих регулярному выражению
- Отбор строк из заданного диапазона
- Комбинирование условий фильтрации
- Отбор строк по условиям относительно отдельных слов
- Отбор строк на основе числовых характеристик
- Работа со строками в awk
- Форматированный вывод
- Функции преобразования
- Условные конструкции
- Переменные
- Циклы
- Нестандартный разделитель слов
- Комбинирование фильтров и команд печати
- Использование языка AWK для работы с текстом в Linux
- Основной синтаксис
- Основы работы с awk
- Встроенные переменные и расширенный формат awk
- Условные операторы и поиск по полям
- Заключение
- Язык обработки шаблонов awk
- Чтение awk-скриптов из командной строки
- Позиционные переменные, хранящие данные полей
- Использование нескольких команд
- Чтение скрипта awk из файла
- Выполнение команд до начала обработки данных
- Выполнение команд после окончания обработки данных
- Основные встроенные переменные
- Дополнительные встроенные переменные
- Пользовательские переменные
- Условный оператор if
- Цикл while
- Цикл for
- Массивы
- Форматированный вывод данных
- Встроенные функции
- Математические функции
- Строковые функции
- Функция system
- Пользовательские функции
- Шаблоны
AWK: Примеры программ
Утилита awk является примером классического приложения Linux для обработки текста. Она весьма универсальна и эффективна, хоть и не предоставляет полноценный язык программирования. Однако будьте уверены, что ее возможностей вполне хватит для решения многих задач автоматизированной обработки текста (особенно при комбинировании с другими консольными утилитами).
Способы запуска awk-программ
Если awk -программа достаточно простая и короткая, то ее код можно набрать прямо в консоли:
В качестве входных данных для awk можно использовать не только текстовые файлы, но и вывод в стандартный поток других приложений:
В случае, когда код awk -программы достаточно объемный или должен быть сохранен для повторного использования, его можно вызывать из файла с ключом -f :
Для проведения экспериментов используем файл test.cpp , на котором будем проверять результаты работы awk — программ:
Реклама
Фильтрация строк с помощью awk
В первую очередь awk позволяет отбирать строки из текста на основе регулярных выражений и некоторых числовых условий.
Отбор строк, соответствующих регулярному выражению
Например, чтобы получить все строки файла test.cpp , содержащие директиву препроцессора #include , воспользуемся следующей командой:
Регулярное выражение записывается между двумя символами / . В результате получим:
Отбор строк, НЕ соответствующих регулярному выражению
Чтобы оставить все строки, которые не соответствуют регулярному выражению, воспользуйтесь командой из предыдущего подраздела и поставьте в начало awk -кода восклицательный знак. Например, так мы исключим все закомментированные строки:
Вот что осталось:
Отбор строк из заданного диапазона
Определить диапазон строк для вывода на экран можно с помощью двух регулярных выражений, записанных через запятую. В качестве примера найдем определение всех функций, возвращающих int :
Комбинирование условий фильтрации
Для проверки строк сразу по нескольким условиям используйте операторы && (И) и || (ИЛИ) .
Следующая команда выводит все комментарии, которые не содержат main :
Ранее мы искали диапазон строк по двум регулярным выражениям, но если номера строк, которые нужно вывести, известные заранее, то все упрощается:
NR — переменная awk , которая определяет номер строки. Таким образом, представленный код выводит 5-ую и 6-ую строки:
Отбор строк по условиям относительно отдельных слов
Awk может фильтровать текст не только по строкам, но и по отдельным словам. На i -ое слово в строке можно сослаться с помощью $i . Нумерация начинается с единицы, а $0 определяет содержимое всей строки. Количество слов в строке определяется с помощью переменной NF , поэтому $NF указывает на последнее слово. Например, найдем строки, первым словом которых является int или void :
Соответствующий вывод на консоль:
Однако проще использовать проверку по регулярному выражению для слова. Для этого в awk предусмотрен специальный оператор
, который нужно поставить между переменной, указывающей на слово, и регулярным выражением. В качестве примера перепишем предыдущую команду в более компактном виде:
Отбор строк на основе числовых характеристик
В awk доступны арифметические операторы языка C, что открывает свободу действий. Пример ниже выводит все четные строки ( NR — номер строки):
Следующая awk -программа выводит все строки, у которых длина 1-ого слова равна трем:
В результате получаем:
Далее приводится код для вывода строк, состоящих из двух слов ( NF — количество слов в строке):
И соответствующий вывод:
Реклама
Работа со строками в awk
Как вы могли убедиться, awk обладает неплохим набором функций для фильтрации строк текста. Однако для этих строк еще можно выполнять различные преобразования. Команды для работы со строками должны быть обернуты в фигурные скобки < . >. Код в скобках последовательно вызывается для каждой строки обрабатываемого текста.
Форматированный вывод
В awk имеется прямой аналог функции printf() языка C . В качестве примера выведем в начале каждой строки ее номер:
Вот что получили:
Функции преобразования
Кроме printf() есть в awk и другие функции. Например, print() и toupper() :
Условные конструкции
В awk -программах доступны операторы if-else . Например, следующий код выводит без изменения строки, у которых на 1-ой позиции стоит int , а на последней — < , иначе на консоль отправляется --- :
Выполнение кода приводит к выводу следующего:
Переменные
Доступны в awk -программах и переменные, которые не требуется предварительно объявлять. Следующий код для подсчета количества строк и слов в тексте поместим в файл stat.awk :
Тогда его вызов осуществляется следующим образом:
Фильтр END указывает, что код в скобках после него должен выполняться только после прохода всех строк. Доступен в awk и фильтр BEGIN , поэтому в более общем случае программа принимает вид:
Обратите внимание, что посчитать строки и слова в тексте намного проще с помощью wc :
Циклы
В awk -программах вам также доступны циклы for и while в стиле C . Для примера выведем все строки в обратном порядке. Создадим файл reverse.awk следующего содержимого:
Вызовем программу следующий образом:
В результате слова в каждой строке будут выведены в обратном порядке:
Нестандартный разделитель слов
По умолчанию awk в качестве разделителя слов использует пробельные символы, однако такое поведение можно изменить. Для этого воспользуйтесь ключом -F , после которого укажите строку, определяющую разделитель. Например, следующая программа выводит название группы и ее пользователей (если в группе есть пользователи) из файла /etc/group , применяя в качестве разделителя символ двоеточия:
Комбинирование фильтров и команд печати
Все рассмотренные ранее фильтры можно использовать совместно с командами обработки строк. Достаточно записать ограничения перед фигурными скобками. Ниже представлен пример для вывода первых 9 строк вывода команды ps , содержащей информацию о пользователе, идентификаторе процесса и имени команды:
Источник
Использование языка AWK для работы с текстом в Linux
Утилиты Linux часто повторяют принципы работы Unix. Инструменты стремятся к простоте, используют обычные текстовые файлы для ввода и вывода данных и работают по модульному принципу. Такое подражание также предоставляет огромные функциональные возможности обработки текста с помощью инструментов sed и awk.
Данное руководство описывает использование awk. Awk – это одновременно язык програмирования и текстовый процессор, предоставляющий несколько очень удобных способов обработки текстовых данных. Все примеры были выполнены на Ubuntu 12.04 VPS, но любая современная система Linux должна работать таким же образом.
Основной синтаксис
Команда awk включена во все современные дистрибутивы Linux по умолчанию, ее не нужно устанавливать.
Лучше всего аwk справляется с файлами, отформатированными предсказуемым образом. К примеру, эта команда особенно сильна в анализе и обработке табличных данных. Она работает путем построчного разбора всего файла.
По умолчанию для разделения полей она использует пробельные символы и символы табуляции. К счастью, большинство систем Linux используют такой формат.
Базовый формат команды awk:
Поисковый шаблон или действие можно опустить. Если действие не указано, по умолчанию команда awk выведет результат на экран, то есть, просто выведет все совпавшие с шаблоном строки.
Если был пропущен шаблон, awk выполнит указанное действие для всех строк.
Если обе части были указаны, awk использует поисковый шаблон, чтобы вывести совпавшие с ним строки, а затем выполняет над этими строками указанное действие.
Основы работы с awk
В своей простейшей форме awk, как и cat, просто выводит все строки текстового файла на экран.
Для примера попробуйте вывести файл fstab, содержащий список существующих файловых систем:
awk ‘
# /etc/fstab: static file system information.
#
# Use ‘blkid’ to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/vda1 during installation
UUID=b96601ba-7d51-4c5f-bfe2-63815708aabd / ext4 noatime,errors=remount-ro 0 1
Как видите, команда просто вывела все строки файла, что не очень удобно. К счастью, awk обладает широкими возможностями фильтрации поиска:
awk ‘/UUID/’ /etc/fstab
# device; this may be used with UUID= as a more robust way to name devices
UUID=b96601ba-7d51-4c5f-bfe2-63815708aabd / ext4 noatime,errors=remount-ro 0 1
Как видите, теперь awk вывела только строки, содержащие последовательность «UUID». Можно также избавиться от посторонних строк, указав, что последовательность «UUID» должна быть расположена в самом начале строки:
awk ‘/^UUID/’ /etc/fstab
UUID=b96601ba-7d51-4c5f-bfe2-63815708aabd / ext4 noatime,errors=remount-ro 0 1
Аналогичным образом можно использовать часть «действие», чтобы указать, какую именно информацию нужно вывести. К примеру, чтобы вывести только первый столбец, наберите:
awk ‘/^UUID/
UUID=b96601ba-7d51-4c5f-bfe2-63815708aabd
Также можно сослаться на каждый столбец (разделены пробелами) с помощью переменных, связанных с номером столбца. Так, на первый столбец можно сослаться, набрав $1; чтобы сослаться на всю строку, используйте $0.
Встроенные переменные и расширенный формат awk
Awk использует некоторые встроенные переменные, чтобы определять фрагменты информации при обработке текста.
Список встроенных переменных awk:
- FILENAME: ссылается на текущий входной файл.
- FNR: Ссылается на номер текущей записи относительно текущего вводного файла. Например, если в данный момент открыто два вводных файла, команда выведет номер записи каждого из них.
- FS: текущий разделитель полей, который используется для обозначения каждого поля в записи. По умолчанию установлен пробел.
- NF: количество полей в текущей записию
- NR: номер текущей записи.
- OFS: разделитель полей для выводимых данных. По умолчанию установлен пробел.
- ORS: разделитель записей для выводимых данных. По умолчанию установлен символ новой строки.
- RS: разделитель записей, отделяющий записи во входном файле. По умолчанию это символ новой строки.
Значения этих переменных можно менять в соответствии с потребностями файлов. Обычно это делается во время инициализации обработки awk.
В целом, синтаксис awk немного более сложный, чем кажется сначала. Кроме того, он содержит дополнительные блоки BEGIN и END, которые могут содержать команды, которые нужно выполнить перед или после обработки файла соответственно.
Расширенный синтаксис выглядит примерно так:
Ключевые слова BEGIN и END, на самом деле, просто конкретные совокупности условий, так же, как и параметры поиска. Они совпадают до и после обработки документа.
Это значит, что некоторые переменные блока BEGIN можно изменить. К примеру, файл /etc/passwd разделён с помощью исмволов двоеточия (:), а не пробелов. Чтобы вывести первый столбец этого файла, можно использовать:
Блоки BEGIN и END можно использовать, чтобы получить простую информацию о выведенных полях:
Как видите, воспользовавшись некоторыми функциями awk, можно достаточно гибко отформатировать некоторые параметры.
Оба блока расширения – необязательны. По сути, основные действия тоже необязательны, если другая часть действий уже указана. К примеру, с awk можно работать так:
awk ‘BEGIN < print "We can use awk like the echo command"; >‘
We can use awk like the echo command
Условные операторы и поиск по полям
В одном из приведенных выше примеров в файле /etc/fstab была найдена последовательность «UUID». Это было просто, так как нужно было найти строку, содержащую эту последовательность в начале.
Но что, если нужно найти последовательность, расположенную в начале поля?
Можно создать тестовый файл favorite_food.txt, содержащий пронумерованный список любимых продуктов группы друзей.
echo «1 carrot sandy
2 wasabi luke
3 sandwich brian
4 salad ryan
5 spaghetti jessica» > favorite_food.txt
Чтобы вывести все слова, начинающиеся с «sa», используйте:
awk ‘/sa/’ favorite_food.txt
1 carrot sandy
2 wasabi luke
3 sandwich brian
4 salad ryan
В выведенном результате показаны не только слова, начинающиеся с последовательности «sa». Это касается слова «wasabi», которое содержит нужную последовательность в середине; кроме того, слово «sandy» также не совсем соответствует шаблону, так как находится в другом столбце. Нужно вывести только слова, которые начинаются с «sa» во втором столбце.
Чтобы сделать это, наберите:
/^sa/’ favorite_food.txt
3 sandwich brian
4 salad ryan
Как видите, это работает должным образом.
Символ «^» говорит awk ограничить поиск началом поля. Часть «field_num
» указывает, что искать нужно только во втором столбце.
Вывести последовательности, которые не совпадают с шаблоном, можно при помощи символа «!», указанного перед тильдой (
). Данная команда выведет все строки, которые не начинаются с «sa».
/^sa/’ favorite_food.txt
1 carrot sandy
2 wasabi luke
5 spaghetti jessica
Чтобы вывести строки, для которых верно предыдущее выражение и порядковый номер которых меньше 5, используйте условный оператор:
Это выполняет несколько новых действий. Так, оператор && дает возможность задавать дополнительные требования. Таким образом можно объединить произвольное количество условий для поиска нужной строки.
Этот оператор используется для того, чтоб проверить, что значение первого столбца меньше, чем 5.
Заключение
Данное руководство дает общее представление о том, как awk может управлять, форматировать и выборочно выводить текстовые файлы. Тем не менее, работа с Awk – достаточно широкая тема, ведь на самом деле это целый язык программирования, дополненый функциями присвоения переменных, управляющими структурами, встроенными функциями и т.п. Его можно использовать для быстрого и удобного форматирования текста скриптов.
Получить больше информации о работе awk, а также ознакомиться с gawk, современной GNU-версией awk, можно на специальных онлайн-ресурсах.
Источник
Язык обработки шаблонов awk
Awk — скриптовый язык построчного разбора и обработки входного потока (например, текстового файла) по заданным шаблонам (регулярным выражениям). Часто используется в сценариях командной строки. С помощью языка awk можно выполнять следующие действия:
- Объявлять переменные для хранения данных.
- Использовать арифметические и строковые операторы для работы с данными.
- Использовать управляющие операторы и циклы, что позволяет реализовать сложные алгоритмы.
- Создавать форматированные отчёты.
Вызов awk выглядит так:
Awk рассматривает входной поток как набор записей. Каждая запись делится на поля. По умолчанию разделителем записей является символ новой строки (то есть записи — это строки), разделителем полей — символ пробела или табуляции. Символы-разделители можно явно определить в программе.
- -F fs — позволяет указать символ-разделитель для полей в записи.
- -f file — указывает имя файла, из которого нужно прочесть awk-скрипт.
- -v var=value — позволяет объявить переменную и задать её значение по умолчанию.
- -mf N — задаёт максимальное число полей для обработки в файле данных.
- -mr N — задаёт максимальный размер записи в файле данных.
Чтение awk-скриптов из командной строки
Скрипты awk, которые можно писать прямо в командной строке, оформляются в виде текстов команд, заключённых в фигурные скобки. Кроме того, текст скрипта нужно заключить в одинарные кавычки:
При вызове не указан файл с данными, поэтому awk ожидает поступления данных из STDIN . Чтобы завершить работу awk, нужно передать ему символ конца файла, воспользовавшись сочетанием клавиш CTRL+D .
Позиционные переменные, хранящие данные полей
Одна из основных функций awk заключается в возможности манипулировать данными в текстовых файлах. Делается это путём автоматического назначения переменной каждому элементу в строке. По умолчанию awk назначает следующие переменные каждому полю данных, обнаруженному им в записи:
- $0 — представляет всю строку текста (запись)
- $1 — первое поле в записи (строке)
- $2 — второе поле в записи (строке)
- и так далее
К переменной $n можно обратиться не только с помощью номера 0, 1, 2. Но и использовать переменную или выражение:
Поля выделяются из текста с использованием символа-разделителя. По умолчанию — это пробел или символ табуляции.
Если в качестве разделителя полей используется что-то, отличающееся от пробела или табуляции:
Использование нескольких команд
Awk позволяет обрабатывать данные с использованием многострочных скриптов. Чтобы передать awk многострочную команду, нужно разделить её части точкой с запятой:
Первая команда записывает новое значение в переменную $4 , а вторая выводит на экран всю строку.
Чтение скрипта awk из файла
Awk позволяет хранить скрипты в файлах и ссылаться на них, используя ключ -f . Подготовим файл user-home.awk , в который запишем следующее:
Вызовем awk, указав этот файл в качестве источника команд:
В файле скрипта может содержаться множество команд, при этом каждую из них достаточно записывать с новой строки, ставить после каждой точку с запятой не требуется:
Выполнение команд до начала обработки данных
Иногда нужно выполнить какие-то действия до того, как скрипт начнёт обработку записей из входного потока. Для этого можно воспользоваться ключевым словом BEGIN . Команды, которые следуют за BEGIN , будут исполнены до начала обработки данных.
Выполнение команд после окончания обработки данных
Ключевое слово END позволяет задавать команды, которые надо выполнить после окончания обработки данных:
Напишем скрипт следующего содержания и сохраним его в файле begin-end.awk :
Тут, в блоке BEGIN , создаётся заголовок табличного отчёта. В этом же разделе мы указываем символ-разделитель. После окончания обработки файла, благодаря блоку END , создается подвал отчета. Запустим скрипт:
Основные встроенные переменные
Кроме позиционных переменных $1 , $2 , $3 , которые позволяют извлекать значения полей, есть еще множество других. Вот некоторые из наиболее часто используемых:
- FIELDWIDTHS — разделённый пробелами список чисел, определяющий точную ширину каждого поля данных с учётом разделителей полей.
- FS — переменная, позволяющая задавать символ-разделитель полей.
- RS — переменная, позволяющая задавать символ-разделитель записей.
- OFS — разделитель полей на выводе awk-скрипта.
- ORS — разделитель записей на выводе awk-скрипта.
По умолчанию переменная OFS настроена на использование пробела. Её можно установить так, как нужно для целей вывода данных:
В некоторых случаях, вместо использования разделителя полей, данные в пределах записей расположены в колонках постоянной ширины. В подобных случаях необходимо задать переменную FIELDWIDTHS таким образом, чтобы её содержимое соответствовало особенностям представления данных.
При установленной переменной FIELDWIDTHS awk будет игнорировать переменную FS и находить поля данных в соответствии со сведениями об их ширине, заданными в FIELDWIDTHS .
Переменные RS и ORS задают порядок обработки записей. По умолчанию RS и ORS установлены на символ перевода строки. Это означает, что awk воспринимает каждую новую строку текста как новую запись и выводит каждую запись с новой строки.
Иногда случается так, что поля в потоке данных распределены по нескольким строкам:
Здесь в переменную FS мы записываем символ перевода строки. Это укажет awk на то, что каждая строка в потоке данных является отдельным полем. Кроме того, в переменную RS мы записываем пустую строку. Потому что в файле users.txt блоки данных о разных людях разделены пустой строкой. В результате awk будет считать пустые строки разделителями записей.
Дополнительные встроенные переменные
Помимо встроенных переменных, о которых мы уже говорили, существуют и другие:
- ARGC — количество аргументов командной строки.
- ARGV — массив с аргументами командной строки.
- ARGIND — индекс текущего обрабатываемого файла в массиве ARGV .
- ENVIRON — ассоциативный массив с переменными окружения и их значениями.
- ERRNO — код системной ошибки, которая может возникнуть при чтении или закрытии входных файлов.
- FILENAME — имя входного файла с данными.
- IGNORECASE — если эта переменная установлена в ненулевое значение, при обработке игнорируется регистр символов.
- FNR — номер текущей записи в файле данных.
- NF — общее число полей данных в текущей записи.
- NR — общее число обработанных записей.
Переменные ARGC и ARGV позволяют работать с аргументами командной строки. При этом скрипт, переданный awk, не попадает в массив аргументов ARGV :
Переменная ENVIRON представляет собой ассоциативный массив с переменными среды:
Переменные среды можно использовать и без обращения к ENVIRON :
Переменная NF позволяет обращаться к последнему полю данных в записи, не зная его точной позиции:
Эта переменная содержит числовой индекс последнего поля данных в записи. Обратиться к данному полю можно, поместив перед NF знак $ .
Переменные FNR и NR , хотя и могут показаться похожими, на самом деле различаются. Так, переменная FNR хранит число записей, обработанных в текущем файле. Переменная NR хранит общее число обработанных записей:
Пользовательские переменные
Как и любые другие языки программирования, awk позволяет программисту объявлять переменные. Имена переменных могут включать в себя буквы, цифры, символы подчёркивания. Однако, они не могут начинаться с цифры:
Каждая переменная или поле могут потенциально быть строкой или числом. Awk рассматривает переменную как строковую, пока не возникает необходимость выполнить операции сложения или конкатенации. Если к числу прибавляется строка, то строка автоматически преобразуется в число. Если к строке «прицепляется» число, то число преобразуется в строку.
Условный оператор if
Однострочный вариант оператора:
Если нужно выполнить в блоке if несколько операторов, их нужно заключить в фигурные скобки:
условный оператор if может содержать блок else :
Цикл while
Цикл while позволяет перебирать наборы данных, проверяя условие, которое остановит цикл.
В циклах while можно использовать команды break и continue . Первая позволяет досрочно завершить цикл и приступить к выполнению команд, расположенных после него. Вторая позволяет, не завершая до конца текущую итерацию, перейти к следующей.
Цикл for
Решим задачу расчёта среднего значения числовых полей с использованием цикла for :
Массивы
У awk есть ассоциативные массивы — в качестве индекса можно использовать строку или число. Нет необходимости заранее объявлять размер массива — массив может быть изменен во время выполнения.
Пример использования массива:
Удаление элемента массива:
Форматированный вывод данных
Команда printf позволяет выводить форматированные данные. Она даёт возможность настраивать внешний вид выводимых данных благодаря использованию шаблонов, в которых могут содержаться текстовые данные и спецификаторы форматирования.
Спецификатор форматирования — это специальный символ, который задаёт тип выводимых данных и то, как именно их нужно выводить. Awk использует спецификаторы форматирования как указатели мест вставки данных из переменных, передаваемых printf . Первый спецификатор соответствует первой переменной, второй спецификатор — второй, и так далее.
- %c — воспринимает переданное ему число как код ASCII-символа и выводит этот символ.
- %d — выводит десятичное целое число.
- %i — то же самое, что и d .
- %e — выводит число в экспоненциальной форме.
- %f — выводит число с плавающей запятой.
- %g — выводит число либо в экспоненциальной записи, либо в формате с плавающей запятой, в зависимости от того, как получается короче.
- %o — выводит восьмеричное представление числа.
- %s — выводит текстовую строку.
Встроенные функции
При работе с awk программисту доступны встроенные функции. В частности, это математические и строковые функции, функции для работы со временем.
Математические функции
- cos(x) — косинус x (x выражено в радианах).
- sin(x) — синус x (x выражено в радианах).
- exp(x) — экспоненциальная функция.
- int(x) — возвращает целую часть аргумента.
- log(x) — натуральный логарифм.
- rand() — возвращает случайное число с плавающей запятой в диапазоне от 0 до 1.
- sqrt(x) — квадратный корень из x.
Строковые функции
- length([arg]) — возвращает длину arg ; если arg не указан, то выдает длину текущей строки.
- match(string,pattern) — возвращает позицию вхождения шаблона pattern в строку string ; или 0 , если совпадение не найдено.
- index(string,needle) — возвращает начальную позицию вхождения подстроки needle в строку string ; если needle в string не содержится, возвращает 0 .
- split(string,array[,sep]) — помещает поля строки string в массив array и возвращает число заполненных элементов массива; если указан sep , то при анализе строки он понимается как разделитель.
- sub(replace,pattern[,string]) — заменяет в строке string первое вхождение шаблона pattern на строку replace ; в случае отсутствия аргумента string , применяется к текущей записи.
- gsub(replace,pattern[,string]) — аналогична sub() , но заменяет все вхождения.
- substr(string,start,length) — возвращает подстроку строки string , начиная с позиции start , длиной length символов.
- tolower() — перевод в нижний регистр.
- toupper() — перевод в верхний регистр.
Вот как пользоваться этими функциями:
Функция system
Функция system(«command») выполняет команду command и возвращает состояние выполненной команды.
Пользовательские функции
При необходимости можно создавать собственные функции awk. Для возвращения значения из функции можно использовать оператор return .
Шаблоны
В общем случае программа awk имеет вид:
Каждая запись поочерёдно сравнивается со всеми шаблонами , и каждый раз когда найдено соответствие, выполняется указанное действие . Если шаблон не указан, то действие выполняется для любой записи. Если не указано действие , то запись выводится. Специальные шаблоны BEGIN и END позволяют получить управление перед чтением первой входной строки и после прочтения последней входной строки, соответственно.
В предпоследнем примере $3
/903/ означает, что третье поле содержит строку 903 . В последнем примере $3 !
/903/ все наоборот — третье поле не должно содержать строку 903 .
В шаблонах можно использовать регулярные выражения:
Шаблоны в awk это не просто строка или регулярное выражение. Они могут быть произвольными комбинациями относительных выражений (больше, меньше, равно, не равно, …) и регулярных выражений с использованием ! , || , && и круглых скобок:
/шаблон/
/шаблон/) || (выражение in массив)
В случае использования относительных выражений , , == , != , >= , > происходит сравнение чисел, если оба операнда — числа. В противном случае сравниваются строки.
Источник