gawk — Команда Linux — Команда Unix

gawk — язык сканирования и обработки паттернов

конспект

простофиля [Опции стиля POSIX или GNU] программный файл [ ] файл …
простофиля [Опции стиля POSIX или GNU] [ ] программно-текстовый файл …

pgawk [Опции стиля POSIX или GNU] программный файл [ ] файл …
pgawk [Опции стиля POSIX или GNU] [ ] программно-текстовый файл …

Описание

Gawk — это реализация GNU Project языка программирования AWK. Он соответствует определению языка в Стандарте языка команд и утилит POSIX 1003.2. Эта версия, в свою очередь, основана на описании на языке программирования AWK Aho, Kernighan и Weinberger с дополнительными функциями, присутствующими в версии System V Release 4 UNIX awk. Gawk также предоставляет более свежие расширения awk Bell Laboratories и ряд расширений, специфичных для GNU.

Pgawk — это профилирующая версия gawk. Он полностью идентичен gawk, за исключением того, что программы работают медленнее, и он автоматически создает профиль выполнения в файле. awkprof.out когда сделано. Увидеть —профиль вариант, ниже.

Командная строка состоит из параметров для самоконтроля, текст программы AWK (если не предоставлено через или же —файл параметры) и значения, которые будут доступны в ARGC а также ARGV предопределенные переменные AWK.

Вариант Формат

Опции Gawk могут быть либо традиционными однобуквенными POSIX, либо длинными опциями в стиле GNU. Опции POSIX начинаются с одного « — », а длинные опции начинаются с « — ». Длинные опции предоставляются как для специфических для GNU функций, так и для функций с мандатом POSIX.

Следуя стандарту POSIX, специфичные для gawk опции предоставляются через аргументы -W вариант. множественный -W варианты могут быть предоставлены каждый -W Опция имеет соответствующую длинную опцию, как описано ниже. Аргументы длинных опций либо соединяются с опцией знак равно знак, без пробелов, или они могут быть предоставлены в следующем аргументе командной строки. Длинные варианты могут быть сокращены до тех пор, пока сокращение остается уникальным.

Параметры

Gawk принимает следующие параметры, перечисленные в алфавитном порядке.

-F фс

—Поле-разделитель fs Используйте fs для разделителя поля ввода (значение FS предопределенная переменная).

-v варзнак равновал

—назначать варзнак равноval Присвойте значение val переменной var до начала выполнения программы. Такие значения переменных доступны для НАЧАТЬ блок программы AWK.

Программа-файл

—файл program-file Считывает исходный код программы AWK из файла program-file, а не из первого аргумента командной строки. множественный (или же —файл) варианты могут быть использованы.

-М.Ф. NNN

-г-н NNN Установите различные ограничения памяти на значение NNN. е флаг устанавливает максимальное количество полей, а р флаг устанавливает максимальный размер записи. Эти два флага и вариант из исследовательской версии UNIX awk Bell Laboratories. Gawk игнорирует их, поскольку gawk не имеет предопределенных ограничений.

-W compat

-W традиционный

—Compat

—традиционный Запустить в режиме совместимости. В режиме совместимости gawk ведет себя так же, как и в UNIX awk; ни одно из специфичных для GNU расширений не распознается. Использование —традиционный является предпочтительным по сравнению с другими формами этого варианта. Видеть GNU EXTENSIONS, ниже, для получения дополнительной информации.

-W copyleft

-W авторское право

—копилефт

—Авторские права Распечатайте краткую версию информационного сообщения об авторских правах GNU на стандартном выходе и успешно завершите работу.

-W dump-переменные[знак равнофайл]

—дамп-переменные[знак равнофайл] Распечатать отсортированный список глобальных переменных, их типы и конечные значения в файл. Если файл не указан, gawk использует файл с именем awkvars.out в текущем каталоге.

Наличие списка всех глобальных переменных является хорошим способом поиска типографских ошибок в ваших программах. Вы также можете использовать эту опцию, если у вас большая программа с большим количеством функций, и вы хотите быть уверены, что ваши функции случайно не используют глобальные переменные, которые вы подразумевали быть локальными. (Это особенно легко сделать с простыми именами переменных, такими как я, J, и так далее.)

-W помощь

-W использование

—Помогите

—использование Напечатайте сравнительно краткое резюме доступных опций на стандартном выводе. (В соответствии со стандартами кодирования GNU эти параметры вызывают немедленный, успешный выход.)

-W lint[= со смертельным исходом]

—корпия[= со смертельным исходом] Предоставлять предупреждения о конструкциях, которые являются сомнительными или непереносимыми для других реализаций AWK. С необязательным аргументом фатальный, предупреждения от ворса становятся фатальными ошибками. Это может быть радикальным, но его использование, безусловно, будет стимулировать разработку более чистых программ AWK.

-W lint-old

—ворса старый Предоставлять предупреждения о конструкциях, которые нельзя переносить в исходную версию Unix awk.

-W gen-po

—ген-ро Сканирование и анализ программы AWK, а также создание GNU .ро форматировать файл на стандартный вывод с записями для всех локализуемых строк в программе. Сама программа не выполняется. Посмотрите дистрибутив gettext GNU для получения дополнительной информации о .ро файлы.

-W недесятичных данных

—недесятичный-данные Распознавать восьмеричные и шестнадцатеричные значения во входных данных. Используйте эту опцию с большой осторожностью!

-W posix

—POSIX Это включает режим совместимости со следующими дополнительными ограничениями:

*

\Икс escape-последовательности не распознаются.

*

Только пробел и табуляция действуют как разделители полей, когда FS установлен на один пробел, новая строка — нет.

*

Вы не можете продолжить строки после ? а также :.

*

Синоним FUNC по ключевому слову функция не признается

*

Операторы ** а также знак равно не может быть использован вместо ^ а также ^ =.

*

fflush () функция недоступна.

-W профиль[знак равноprof_file]

—профиль[знак равноprof_file] Отправить данные профилирования в prof_file. По умолчанию awkprof.out. При запуске с gawk профиль является просто «довольно печатной» версией программы. При запуске с pgawk профиль содержит счетчики выполнения каждого оператора в программе в левом поле и счетчики вызовов функций для каждой пользовательской функции.

-W повторный интервал

—повторно интервала Включите использование интервальных выражений в сопоставлении регулярных выражений (см. Обычные выражения, ниже). Интервальные выражения традиционно недоступны на языке AWK. Стандарт POSIX добавил их, чтобы сделать awk и egrep согласованными друг с другом. Однако их использование может сломать старые программы AWK, поэтому gawk предоставляет их только в том случае, если они запрашиваются с помощью этой опции, или когда —POSIX указано.

-W источник программный текст

—источник программный текст Использовать программный текст в качестве исходного кода программы AWK. Эта опция позволяет легко смешивать библиотечные функции (используемые через а также —файл параметры) с исходным кодом, введенным в командной строке. Он предназначен в основном для средних и больших программ AWK, используемых в сценариях оболочки.

-W версия

—версия Вывести информацию о версии для этой конкретной копии gawk на стандартный вывод. Это полезно главным образом для того, чтобы узнать, является ли текущая копия gawk в вашей системе актуальной по отношению к тому, что распространяет Free Software Foundation. Это также полезно при сообщении об ошибках. (В соответствии со стандартами кодирования GNU эти параметры вызывают немедленный, успешный выход.)

Сигнал об окончании опций. Это полезно, чтобы разрешить дальнейшие аргументы самой программе AWK начинаться с « — ». Это главным образом для согласованности с соглашением разбора аргументов, используемым большинством других программ POSIX.

В режиме совместимости любые другие параметры помечаются как недействительные, но в противном случае игнорируются. В обычном режиме, пока задан текст программы, неизвестные опции передаются программе AWK в ARGV массив для обработки. Это особенно полезно для запуска программ на AWK через механизм исполняемого интерпретатора « #! ».

ИСПОЛНЕНИЕ ПРОГРАММЫ AWK

Программа AWK состоит из последовательности операторов шаблонного действия и необязательных определений функций.

шаблон { заявления о действиях }
функция имя(список параметров) { заявления }

Gawk сначала читает исходный код программы из файла (ов) программы, если он указан, из аргументов —источник, или из первого неопционального аргумента в командной строке. а также —источник параметры могут быть использованы несколько раз в командной строке. Gawk читает текст программы, как если бы все программные файлы и исходные тексты командной строки были объединены вместе. Это полезно для создания библиотек функций AWK без необходимости включать их в каждую новую программу AWK, которая их использует. Он также предоставляет возможность смешивать библиотечные функции с программами командной строки.

Переменная среды AWKPATH указывает путь поиска, который будет использоваться при поиске исходных файлов, названных с помощью вариант. Если эта переменная не существует, путь по умолчанию«: / USR / местные / доли / AWK». (Фактический каталог может отличаться в зависимости от того, как gawk был собран и установлен.) Если имя файла присвоено опция содержит символ `/ ‘, поиск пути не выполняется.

Gawk выполняет программы AWK в следующем порядке. Во-первых, все переменные назначаются через -v Варианты выполнены. Затем gawk компилирует программу во внутреннюю форму. Затем gawke выполняет код в НАЧАТЬ блок (ы) (если есть), а затем приступает к чтению каждого файла, указанного в ARGV массив. Если в командной строке не указаны файлы, gawk читает стандартный ввод.

Если имя файла в командной строке имеет вид varзнак равноval он обрабатывается как присваивание переменной. Переменной var будет присвоено значение val. (Это происходит после любого НАЧАТЬ блок (ы) были запущены.) Назначение переменных командной строки наиболее полезно для динамического присвоения значений переменным, которые AWK использует для управления тем, как ввод разбивается на поля и записи. Это также полезно для контроля состояния, если требуется несколько проходов для одного файла данных.

Если значение конкретного элемента ARGV пустой («»), Гоук пропускает это.

Для каждой записи на входе gawk проверяет, соответствует ли она какой-либо схеме в программе AWK. Для каждого шаблона, которому соответствует запись, выполняется соответствующее действие. Шаблоны проверяются в порядке их появления в программе.

Наконец, после того, как весь ввод исчерпан, gawk выполняет код в КОНЕЦ блок (ы) (если есть).

Переменные, записи и поля

Переменные AWK являются динамическими; они появляются, когда их впервые используют. Их значения являются числами с плавающей точкой или строками, или и тем, и другим, в зависимости от того, как они используются. AWK также имеет одномерные массивы; могут быть смоделированы массивы с несколькими измерениями. Несколько предопределенных переменных устанавливаются при запуске программы; они будут описаны по мере необходимости и обобщены ниже.

документация

Обычно записи разделяются символами новой строки. Вы можете контролировать разделение записей, присваивая значения встроенной переменной RS. Если RS любой отдельный символ, этот символ разделяет записи. В противном случае, RS это регулярное выражение. Текст на входе, который соответствует этому регулярному выражению, разделяет запись. Однако в режиме совместимости только первый символ его строкового значения используется для разделения записей. Если RS устанавливается в пустую строку, тогда записи разделяются пустыми строками. когда RS устанавливается в нулевую строку, символ новой строки всегда действует как разделитель полей, в дополнение к любому значению FS можно иметь.

поля

Когда каждая входная запись читается, gawk разбивает запись на поля, используя значение FS переменная как разделитель полей. Если FS является одним символом, поля разделяются этим символом. Если FS является пустой строкой, тогда каждый отдельный символ становится отдельным полем. В противном случае, FS ожидается полное регулярное выражение. В особом случае это FS это один пробел, поля разделены пробелами и / или символами табуляции и / или переводами строки. (Но смотрите обсуждение —POSIX, ниже). НОТА: Значение IGNORECASE (см. ниже) также влияет на разделение полей, когда FS является регулярным выражением, и как записи разделяются, когда RS это регулярное выражение.

Если FIELDWIDTHS Переменная установлена ​​на разделенный пробелами список чисел, каждое поле должно иметь фиксированную ширину, а gawk разделяет запись, используя заданную ширину. Значение FS игнорируется Назначение нового значения FS отменяет использование FIELDWIDTHS, и восстанавливает поведение по умолчанию.

Каждое поле во входной записи может быть связано с его положением, $ 1, $ 2, и так далее. $ 0 это целая запись. Поля не должны ссылаться на константы:

п = 5
печатать $ n

печатает пятое поле во входной записи.

Переменная NF устанавливается на общее количество полей во входной записи.

Ссылки на несуществующие поля (то есть поля после $ NF) создать пустую строку. Однако присвоение несуществующему полю (например, $ (NF + 2) = 5) увеличивает стоимость NF, создает любые промежуточные поля с пустой строкой в ​​качестве их значения и вызывает значение $ 0 для пересчета, с полями, разделенными значением OFS. Ссылки на поля с отрицательными номерами приводят к фатальной ошибке. Уменьшение номера NF вызывает потерю значений полей после нового значения и значения $ 0 для пересчета, с полями, разделенными значением OFS.

Присвоение значения существующему полю приводит к перестройке всей записи, когда $ 0 ссылка. Аналогично, присвоение значения $ 0 вызывает повторную запись записи, создавая новые значения для полей.

Встроенные переменные

Встроенные переменные Gawk:

ARGC

Количество аргументов командной строки (не включает параметры gawk или исходный код программы).

ARGIND

Индекс в ARGV текущего обрабатываемого файла.

ARGV

Массив аргументов командной строки. Массив проиндексирован от 0 до ARGC — 1. Динамическое изменение содержимого ARGV может контролировать файлы, используемые для данных.

BINMODE

В системах, отличных от POSIX, указывает использование режима «бинарный» для всех файловых операций ввода-вывода. Числовые значения 1, 2 или 3 указывают, что входные файлы, выходные файлы или все файлы, соответственно, должны использовать двоичный ввод / вывод. Строковые значения «р», или же «Ж» укажите, что входные файлы или выходные файлы, соответственно, должны использовать двоичный ввод / вывод. Строковые значения «RW» или же «Сог» укажите, что все файлы должны использовать бинарный ввод / вывод. Любое другое строковое значение рассматривается как «RW», но генерирует предупреждающее сообщение.

CONVFMT

Формат преобразования для чисел, «% .6g», по умолчанию.

ЭНВАЙРОН

Массив, содержащий значения текущей среды. Массив индексируется переменными среды, причем каждый элемент является значением этой переменной (например,ENVIRON [ «HOME»] возможно / Главная / Arnold). Изменение этого массива не влияет на среду, видимую программами, которые порождают gawk через перенаправление или Система ()функция.

ERRNO

Если возникает системная ошибка, либо выполните перенаправление для GetLine, во время чтения для GetLine, или во время близко(), тогда ERRNO будет содержать строку, описывающую ошибку. Значение подлежит переводу в неанглийских локалях.

FIELDWIDTHS

Список разделенных пробелами полей. Когда установлено, gawk анализирует входные данные в поля фиксированной ширины вместо использования значения FS переменная как разделитель полей.

ИМЯ ФАЙЛА

Имя текущего входного файла. Если в командной строке не указано файлов, значение ИМЯ ФАЙЛА это « — ». Тем не мение, ИМЯ ФАЙЛА не определено внутри НАЧАТЬ блок (если не установлено GetLine).

FNR

Номер входной записи в текущем входном файле.

FS

Разделитель поля ввода, пробел по умолчанию. Видеть поля, выше.

IGNORECASE

Управляет чувствительностью к регистру всех регулярных выражений и строковых операций. Если IGNORECASE имеет ненулевое значение, затем сравнение строк и сопоставление с образцом в правилах, разделение полей с FS, разделение записи с RS, совпадение регулярного выражения с ~а также !~, и gensub (), GSUB (), индекс(), матч(), Трещина(), а также к югу () все встроенные функции игнорируют регистр при выполнении операций с регулярными выражениями. НОТА: Подписка на массив не затрагивается, равно как и asort () функция.

Таким образом, если IGNORECASE не равно нулю, / Ав / соответствует всем строкам «Абы», «АВы»,«Ab», а также «AB». Как и во всех переменных AWK, начальное значение IGNORECASE равен нулю, поэтому все регулярные выражения и строковые операции обычно чувствительны к регистру. В Unix полный набор символов ISO 8859-1 Latin-1 используется при игнорировании регистра.

LINT

Обеспечивает динамическое управление —корпия вариант из программы AWK. Когда истина, gawk печатает предупреждения lint. Когда ложно, это не так. Когда присваивается строковое значение «Фатальный», предупреждения от ворса становятся фатальными ошибками, точно так же как —ворс = со смертельным исходом. Любое другое истинное значение просто выводит предупреждения.

NF

Количество полей в текущей входной записи.

NR

Общее количество входных записей, замеченных до сих пор.

OFMT

Формат вывода для чисел, «% .6g», по умолчанию.

OFS

Выходной разделитель полей, пробел по умолчанию.

ORS

Разделитель выходных записей, по умолчанию это новая строка.

PROCINFO

Элементы этого массива обеспечивают доступ к информации о работающей программе AWK. В некоторых системах могут быть элементы в массиве, «группа 1» через «группаN« для некоторого n, которое является числом дополнительных групп, которые имеет процесс. Использовать в оператор для проверки этих элементов. Следующие элементы гарантированно будут доступны:

PROCINFO [ «EGID»]

значение системного вызова getegid (2).

PROCINFO [ «EUID»]

значение системного вызова geteuid (2).

PROCINFO [ «FS»]

«FS» если поле расщепляется с FS или «FIELDWIDTHS» если поле расщепляется с FIELDWIDTHS в силе.

PROCINFO [ «ГИД»]

значение системного вызова getgid (2).

PROCINFO [ «pgrpid»]

идентификатор группы процессов текущего процесса.

PROCINFO [ «PID»]

идентификатор процесса текущего процесса.

PROCINFO [ «PPID»]

идентификатор родительского процесса текущего процесса.

PROCINFO [ «UID»]

значение системного вызова getuid (2).

RS

Разделитель входной записи, по умолчанию перевод строки.

RT

Терминатор записи. Gawk устанавливает RT к входному тексту, который соответствует символу или регулярному выражению, указанному RS.

RSTART

Индекс первого символа соответствует матч(); 0 если нет совпадений. (Это означает, что индексы персонажей начинаются с единицы.)

RLENGTH

Длина строки соответствует матч(); -1 если нет совпадений.

SUBSEP

Символ, используемый по умолчанию для разделения нескольких индексов в элементах массива «\ 034».

ДОМЕН

Текстовая область программы AWK; используется для поиска локализованных переводов для строк программы.

Массивы

Массивы подписываются выражением в квадратных скобках ([ а также ]). Если выражение является списком выражений (expr, expr …), то индекс индекса является строкой, состоящей из конкатенации (строки) значения каждого выражения, разделенного значением SUBSEP переменная. Это средство используется для моделирования многомерных массивов. Например:

я = «А»; j = «B»; k = «C»
x [i, j, k] = «привет, мир \ n»

назначает строку «привет, мир \ n» к элементу массива Икс который индексируется строкой«A \ 034B \ 034C». Все массивы в AWK являются ассоциативными, то есть индексируются строковыми значениями.

Специальный оператор в может быть использован в если или же пока оператор, чтобы увидеть, если массив имеет индекс, состоящий из определенного значения.

if (val в массиве)
массив печати [val]

Если массив имеет несколько подписок, используйте (i, j) в массиве.

в конструкция также может быть использована в за цикл для перебора всех элементов массива.

Элемент может быть удален из массива с помощью удалять заявление. удалять Оператор также может быть использован для удаления всего содержимого массива, просто указав имя массива без индекса.

Переменный ввод и преобразование

Переменные и поля могут быть числами (с плавающей запятой) или строками, или и тем, и другим. Как интерпретируется значение переменной, зависит от ее контекста. Если используется в числовом выражении, оно будет рассматриваться как число, если оно используется как строка, оно будет рассматриваться как строка.

Чтобы заставить переменную рассматриваться как число, добавьте к ней 0; чтобы заставить его рассматриваться как строку, объедините его с нулевой строкой.

Когда строка должна быть преобразована в число, преобразование выполняется с помощью strtod (3). Число преобразуется в строку с использованием значения CONVFMT в качестве строки формата для sprintf (3) с числовым значением переменной в качестве аргумента. Однако, хотя все числа в AWK являются числами с плавающей точкой, целые значения всегда преобразуются в целые числа. Таким образом, учитывая

CONVFMT = "% 2.2f"
а = 12
б = а ""

переменная б имеет строковое значение «12» и нет «12,00».

Gawk выполняет сравнение следующим образом: если две переменные являются числовыми, они сравниваются численно. Если одно значение является числовым, а другое имеет строковое значение, которое является « числовой строкой », то сравнения также выполняются численно. В противном случае числовое значение преобразуется в строку и выполняется сравнение строк. Конечно, две строки сравниваются как строки. Обратите внимание, что стандарт POSIX применяет понятие «числовой строки» везде, даже к строковым константам. Однако это явно неверно, и gawk этого не делает. (К счастью, это исправлено в следующей версии стандарта.)

Обратите внимание, что строковые константы, такие как «57», это не числовые строки, это строковые константы. Идея «числовой строки» применима только к полям, GetLine вход, ИМЯ ФАЙЛА, ARGV элементы, ЭНВАЙРОН элементы и элементы массива, созданного Трещина() это числовые строки. Основная идея заключается в том, что пользовательский ввод, и только пользовательский ввод, который выглядит числовым, должен обрабатываться таким образом.

Неинициализированные переменные имеют числовое значение 0 и строковое значение «» (пустая или пустая строка).

Восьмеричные и шестнадцатеричные константы

Начиная с версии 3.1 gawk, вы можете использовать восьмеричные и шестнадцатеричные константы в стиле C в исходном коде программы AWK. Например, восьмеричное значение 011 равно десятичному 9, и шестнадцатеричное значение 0x11 равно десятичному 17.

Строковые Константы

Строковые константы в AWK — это последовательности символов, заключенные в двойные кавычки («). Внутри строк распознаются определенные escape-последовательности, как в C. Это:

\\

Буквальный обратный слеш.

\ а

«Тревожный» персонаж; обычно символ ASCII BEL.

\ б

Забой.

\ е

Форма кормить.

\ п

новая линия.

возврат каретки.

\ т

горизонтальная вкладка.

\ v

вертикальная табуляция

\Иксшестнадцатеричные цифры

Символ, представленный строкой шестнадцатеричных цифр после \Икс. Как и в ANSIC, все последующие шестнадцатеричные цифры считаются частью escape-последовательности. (Эта функция должна рассказать нам о дизайне языка комитетом.) Например, «\ X1B» является символом ASCIIESC (escape)

\ддд

Символ представлен 1-, 2- или 3-значной последовательностью восьмеричных цифр. Например., «\ 033» является символом ASCII ESC (escape)

\с

Буквенный символ c.

Экранирующие последовательности также могут использоваться внутри постоянных регулярных выражений (например,/ [\ t \ f \ n \ r \ v] / соответствует пробельным символам).

В режиме совместимости символы, представленные восьмеричной и шестнадцатеричной escape-последовательностями, обрабатываются буквально при использовании в константах регулярного выражения. Таким образом, / А \ 52b / эквивалентно/ А \ * б /.

Образцы и Действия

AWK — это линейно-ориентированный язык. Сначала идет шаблон, а затем действие. Действие заявления заключены в { а также }. Либо шаблон может отсутствовать, либо действие может отсутствовать, но, конечно, не оба. Если шаблон отсутствует, действие выполняется для каждой записи ввода. Отсутствующее действие эквивалентно

{ Распечатать }

который печатает всю запись.

Комментарии начинаются с символа «#» и продолжаются до конца строки. Пустые строки могут использоваться для разделения операторов. Обычно оператор заканчивается новой строкой, однако это не относится к строкам, оканчивающимся на «, », {, ?, :, , или же ||. Линии, заканчивающиеся на делать или же еще также их заявления автоматически продолжаются в следующей строке. В других случаях строку можно продолжить, заканчивая ее символом ‘, и в этом случае символ новой строки будет игнорироваться.

Несколько операторов могут быть помещены в одну строку, разделяя их «; ». Это относится как к операторам в части действия пары шаблон-действие (обычный случай), так и к самим операторам шаблон-действие.

Узоры

Шаблоны AWK могут быть одним из следующих:

НАЧАТЬ
КОНЕЦ
/регулярное выражение/
реляционное выражение
шаблон шаблон
шаблон || шаблон
шаблон ? шаблон : шаблон
(шаблон)
! шаблон
pattern1, pattern2

НАЧАТЬ а также КОНЕЦ это два специальных вида шаблонов, которые не проверяются на входе. Части действия всех НАЧАТЬ шаблоны объединяются, как если бы все утверждения были записаны в одном НАЧАТЬ блок. Они выполняются до того, как любой из входных данных будет прочитан. Точно так же все КОНЕЦ блоки объединяются и выполняются, когда все входные данные исчерпаны (или когда Выход заявление выполнено). НАЧАТЬ а также КОНЕЦ образцы не могут быть объединены с другими образцами в выражениях образца. НАЧАТЬ а также КОНЕЦ шаблоны не могут иметь пропущенных частей действия.

За /регулярное выражение/ шаблонов, связанный оператор выполняется для каждой входной записи, которая соответствует регулярному выражению. Регулярные выражения такие же, как в egrep (1), и приведены ниже.

Реляционное выражение может использовать любой из операторов, определенных ниже в разделе о действиях. Они обычно проверяют, соответствуют ли определенные поля определенным регулярным выражениям.

, ||, а также ! операторы — это логическое И, логическое ИЛИ и логическое НЕ, соответственно, как в С. Они выполняют оценку короткого замыкания, также как и в С, и используются для объединения более простых выражений шаблонов. Как и в большинстве языков, круглые скобки могут использоваться для изменения порядка оценки.

?: Оператор подобен тому же оператору в C. Если первый шаблон истинен, тогда шаблон, используемый для тестирования, является вторым шаблоном, в противном случае это третий. Только один из второго и третьего паттернов оценивается.

The pattern1, Форма выражения pattern2 называется шаблоном диапазона. Он сопоставляет все входные записи, начиная с записи, которая соответствует pattern1, и продолжается до записи, которая соответствует pattern2, включительно. Он не сочетается ни с каким другим видом выражения шаблона.

Обычные выражения

Регулярные выражения — это расширенный вид, найденный в egrep. Они состоят из символов следующим образом:

с

соответствует неметасимволу c.

\ с

соответствует буквенному символу c.

.

соответствует любому символу, включая перевод строки.

^

соответствует началу строки.

$

соответствует концу строки.

[а …]

список символов, соответствует любому из символов abc ….

[^а …]

список отрицательных символов, соответствует любому символу, кроме abc ….

r1|r2

чередование: соответствует r1 или r2.

R1R2

конкатенация: соответствует r1, а затем r2.

р+

соответствует одному или нескольким r.

р*

соответствует нулю или более r.

р?

соответствует нулю или единице.

(р)

группировка: соответствует р.

р{N}

р{N,}

р{N,м} Одно или два числа внутри фигурных скобок обозначают интервальное выражение. Если в фигурных скобках есть одно число, предыдущее регулярное выражение r повторяется n раз. Если два числа разделены запятой, то r повторяется от n до m раз. Если за запятой стоит одно число, то r повторяется не менее n раз.

Интервальные выражения доступны только если —POSIX или же —повторно интервала указывается в командной строке.

\ у

соответствует пустой строке в начале или конце слова.

\ B

соответствует пустой строке в слове.

\<

соответствует пустой строке в начале слова.

\>

соответствует пустой строке в конце слова.

\ ш

соответствует любому символу, составляющему слово (буква, цифра или подчеркивание).

\ W

соответствует любому символу, который не является составной частью слова.

\ `

соответствует пустой строке в начале буфера (строка).

\ ‘

соответствует пустой строке в конце буфера.

Экранирующие последовательности, допустимые в строковых константах (см. Ниже), также действительны в регулярных выражениях.

Классы символов — это новая функция, представленная в стандарте POSIX. Класс символов — это специальная нотация для описания списков символов, которые имеют определенный атрибут, но сами фактические символы могут варьироваться от страны к стране и / или от набора символов к набору символов. Например, понятие алфавитного символа отличается в США и во Франции.

Класс символов действителен только в регулярном выражении в скобках списка символов. Классы персонажей состоят из [:, ключевое слово, обозначающее класс, и :]. Классы символов, определенные стандартом POSIX:

[Цифра, буква]

Буквенно-цифровые символы.

[:альфа:]

Буквенные символы.

[: Пусто:]

Пробел или символы табуляции.

[: CNTRL:]

Управляющие персонажи.

[: Цифры:]

Числовые символы.

[: График:]

Символы, которые можно распечатать и увидеть. (Пробел печатается, но не виден, а это оба.)

[: Нижняя:]

Строчные буквенные символы.

[:Распечатать:]

Печатные символы (символы, которые не являются управляющими символами.)

[Пунктуатор]

Знаки пунктуации (символы, которые не являются буквами, цифрами, управляющими символами или пробелами).

[:пространство:]

Пробелы (например, пробел, табуляция и подача, чтобы назвать несколько).

[: Верхняя:]

Прописные буквы алфавита.

[: Xdigit:]

Символы, которые являются шестнадцатеричными цифрами.

Например, перед стандартом POSIX, чтобы соответствовать буквенно-цифровым символам, вам пришлось бы написать / [A-Za-z0-9] /. Если в вашем наборе символов есть другие буквенные символы, это не будет соответствовать им, а если ваш набор символов отличается от ASCII, это может даже не совпадать с буквенно-цифровыми символами ASCII. С помощью классов символов POSIX вы можете написать/ [[Цифра, буква]] /, и это соответствует буквенным и цифровым символам в вашем наборе символов.

Две дополнительные специальные последовательности могут появляться в списках символов. Они применяются к наборам символов, не относящимся к ASCII, которые могут иметь отдельные символы (называемые элементами сортировки), которые представлены более чем одним символом, а также несколько символов, которые эквивалентны для целей сортировки или сортировки. (Например, по-французски, простое «e» и e с акцентом на могиле эквивалентны.)

Сортировка символов

Символ сортировки — это многосимвольный элемент сортировки, заключенный в [. а также .]. Например, если ч элемент сопоставления, то [[.Ch.]] является регулярным выражением, которое соответствует этому элементу сортировки, в то время как [Ч] является регулярным выражением, которое соответствует либо с или же час.

Классы эквивалентности

Класс эквивалентности — это специфичное для локали имя для списка символов, которые эквивалентны. Имя заключено в знак равно а также знак равно. Например, имя е может использоваться для представления всех « e », « e ‘,’ ‘и « e`.’ ‘В этом случае [[= Е =]] является регулярным выражением, которое соответствует любому из е, е», или же é`.

Эти функции очень ценны в неанглоязычных регионах. Библиотечные функции, которые gawkuses для сопоставления регулярных выражений, в настоящее время распознают только классы символов POSIX; они не распознают сопоставляющие символы или классы эквивалентности.

\ у, \ B, \<, \>, \ ш, \ W, \ `, а также \ ‘ операторы специфичны для gawk; они являются расширениями, основанными на возможностях библиотек регулярных выражений GNU.

Различные параметры командной строки управляют тем, как gawk интерпретирует символы в регулярных выражениях.

Нет вариантов

В случае по умолчанию gawk предоставляет все средства регулярных выражений POSIX и операторов регулярных выражений GNU, описанные выше. Однако интервальные выражения не поддерживаются.

—POSIX

Поддерживаются только регулярные выражения POSIX, операторы GNU не являются специальными. (Например.,\ ш соответствует буквальному вес). Интервальные выражения допускаются.

—традиционный

Традиционные регулярные выражения Unix awk совпадают. Операторы GNU не являются специальными, интервальные выражения недоступны, равно как и классы символов POSIX ([[Цифра, буква]] и так далее). Символы, описываемые восьмеричной и шестнадцатеричной escape-последовательностями, обрабатываются буквально, даже если они представляют метасимволы регулярного выражения.

—повторно интервала

Разрешить интервальные выражения в регулярных выражениях, даже если —традиционный был предоставлен.

действия

Действие заявления заключены в фигурные скобки, { а также }. Операторы действия состоят из обычных операторов присваивания, условных операторов и циклов, которые встречаются в большинстве языков. Операторы, операторы управления и операторы ввода / вывода доступны по шаблону после C.

операторы

Операторы в AWK в порядке уменьшения приоритета

()

группирование

$

Ссылка на поле.

++ —

Увеличение и уменьшение, как префикс, так и постфикс.

^

Экспонирование (** также могут быть использованы, и знак равно для оператора присваивания).

+ — !

Унарный плюс, унарный минус и логическое отрицание.

* /%

Умножение, деление и модуль.

+ —

Сложение и вычитание.

пространство

Конкатенация строк.

знак равно

!= == Регулярные реляционные операторы.

~! ~

Соответствие регулярному выражению, отрицание соответствия. НОТА: Не используйте постоянное регулярное выражение (/ Foo /) на левой стороне ~ или же !~. Используйте только один справа. Выражение / foo / ~ exp имеет то же значение, что и (($ 0 ~ / foo /) ~ ехр). Обычно это не то, что было задумано.

в

Массив членства.

Логическое И.

||

Логическое ИЛИ.

?:

Условное выражение C Это имеет форму expr1 ? expr2 : expr3. Если expr1 равно true, значением выражения является expr2, в противном случае это expr3. Только один из expr2 и expr3 оценивается.

= + = — =

* = / =% = ^ = Назначение. Оба абсолютное назначение (вар знак равно стоимость) и оператор-назначение (другие формы) поддерживаются.

Контрольные заявления

Контрольные заявления следующие:

если (условие) заявление [ еще заявление ]
пока (условие) заявление
делать заявление пока (условие)
за (выражение1; expr2; expr3) заявление
за (вар в массив) заявление
сломать
Продолжить
удалять массив[индекс]
удалять массив
Выход [выражение]
{ заявления }

Операторы ввода / вывода

Операторы ввода / вывода следующие:

близко(файл [, как])

Закройте файл, канал или совместный процесс. Необязательный how следует использовать только при закрытии одного конца двусторонней трубы для совместного процесса. Это должно быть строковое значение, либо «В» или же «из».

GetLine

Установлен $ 0 из следующей входной записи; установлен NF, NR, FNR.

GetLine <файл

Установлен $ 0 из следующей записи файла; установлен NF.

GetLine вар

Установить переменную из следующей входной записи; установлен NR, FNR.

GetLine вар <файл

Установите var из следующей записи файла.

команда | GetLine [Вар]

Запустите команду, передающую выходные данные в $ 0 или вар, как указано выше.

команда | GetLine [Вар]

Запустите команду как сопроцесс, отправляющий выходные данные в $ 0 или вар, как указано выше. Совместные процессы являются продолжением зеваки.

следующий

Прекратить обработку текущей входной записи. Следующая входная запись считывается, и обработка начинается с первого шаблона в программе AWK. Если достигнут конец входных данных, КОНЕЦ блок (ы), если таковые имеются, выполняются.

nextfile

Прекратить обработку текущего входного файла. Следующая запись входной записи поступает из следующего входного файла. ИМЯ ФАЙЛА а также ARGIND обновляются, FNR сбрасывается на 1, и обработка начинается с первого шаблона в программе AWK. Если достигнут конец входных данных, КОНЕЦ блок (ы), если таковые имеются, выполняются.

Распечатать

Печатает текущую запись. Выходная запись заканчивается значением ORS переменная.

Распечатать список-выражений

Печатает выражения. Каждое выражение отделяется значением OFS переменная. Выходная запись заканчивается значением ORS переменная.

Распечатать список-выражений >файл

Печатает выражения в файле. Каждое выражение отделяется значением OFS переменная. Выходная запись заканчивается значением ORS переменная.

Printf fmt, список expr

Форматировать и печатать.

Printf fmt, список expr >файл

Отформатируйте и напечатайте в файле.

система (CMD линия)

Выполните команду cmd-line и верните статус выхода. (Это может быть недоступно в системах, отличных от POSIX.)

fflush ([файл])

Очистите все буферы, связанные с открытым выходным файлом или файлом канала. Если файл отсутствует, то стандартный вывод сбрасывается. Если file является пустой строкой, тогда все открытые выходные файлы и каналы очищаются.

Дополнительные перенаправления вывода разрешены для Распечатать а также Printf.

печать … >> файл

добавляет вывод в файл.

печать … | команда

пишет на трубе.

печать … | команда

отправляет данные в совместный процесс.

GetLine Команда возвращает 0 в конце файла и -1 в случае ошибки. При ошибке, ERRNO содержит строку, описывающую проблему.

При использовании трубы или совместного процесса GetLine, или из Распечатать или же Printf в цикле, вы должны использовать близко() создать новые экземпляры команды. AWK не закрывает автоматически трубы или сопроцессы, когда они возвращают EOF.

Заявление printf

Версии AWK Printf заявление и Sprintf () Функция (см. ниже) принимает следующие форматы спецификации преобразования:

% с

ASCII персонаж. Если аргумент используется для % с является числовым, обрабатывается как символ и печатается. В противном случае аргумент считается строкой, и печатается единственный первый символ этой строки.

% d,

Десятичное число (целая часть).

% e,% E

Число с плавающей запятой формы [-] d.dddddde [+ -] дд. % E формат использует Е вместо е.

% е

Число с плавающей запятой формы [-] ddd.dddddd.

% g,% G

использование % е или же % е Преобразование, в зависимости от того, что короче, с подавленными незначительными нулями.%ГРАММ формат использует % E вместо % е.

% о

Восьмеричное число без знака (также целое число).

% U Десятичное число без знака (опять же, целое число).

% s

Строка символов.

% x,% X

Шестнадцатеричное число без знака (целое число). %ИКС формат использует ABCDEF вместоABCDEF.

%%

Один % характер; ни один аргумент не преобразуется.

Необязательно, дополнительные параметры могут находиться между % и контрольное письмо:

подсчитывать$

Используйте аргумент count в этот момент в форматировании. Это называется позиционной спецификацией и предназначено в основном для использования в переведенных версиях форматных строк, а не в оригинальном тексте программы AWK. Это расширение Gawk.

Выражение должно быть выровнено по левому краю в его поле.

пространство

Для числовых преобразований ставьте положительные значения с пробелом, а отрицательные — со знаком минус.

+

Знак «плюс», используемый перед модификатором ширины (см. Ниже), говорит, что всегда следует указывать знак для числовых преобразований, даже если форматируемые данные являются положительными. + переопределяет модификатор пространства

#

Используйте « альтернативную форму » для определенных контрольных букв. За % о, поставить ведущий ноль. За %Икс, а также %ИКС, поставлять ведущий 0x или же 0X для ненулевого результата. За % е, % E, а также % е, результат всегда содержит десятичную точку. За %грамм, а также %ГРАММ, конечные нули не удаляются из результата.

Ведущий (ноль) действует как флаг, который указывает, что выходные данные должны быть дополнены нулями вместо пробелов. Это относится даже к нечисловым форматам вывода. Этот флаг действует только тогда, когда ширина поля шире, чем значение для печати.

ширина

Поле должно быть дополнено до этой ширины. Поле обычно заполнено пробелами. Если Флаг был использован, он дополнен нулями.

.Prec

Число, указывающее точность, используемую при печати. Для % е, % E, а также % еформаты, это указывает количество цифр, которые вы хотите напечатать справа от десятичной точки. Для %грамм, а также %ГРАММ форматов, он определяет максимальное количество значащих цифр. Для % d, % о, , % U, %Икс, а также %ИКС форматов, он определяет минимальное количество цифр для печати. За % s, он определяет максимальное количество символов из строки, которая должна быть напечатана.

Динамическая ширина и предварительные возможности ANSI C Е () подпрограммы поддерживаются. * вместо либо ширина или же Prec спецификации приводят к тому, что их значения берутся из списка аргументов Printf или же Sprintf (). Чтобы использовать позиционный спецификатор с динамической шириной или точностью, укажите количество$ после * в строке формата. Например, «% 3 $ * 2 $. * 1 $ S».

Специальные имена файлов

При выполнении перенаправления ввода / вывода с любого Распечатать или же Printf в файл или через GetLine из файла gawk распознает некоторые специальные имена файлов внутри себя. Эти имена файлов позволяют получить доступ к дескрипторам открытых файлов, унаследованных от родительского процесса gawk (обычно это оболочка). Эти имена файлов также могут использоваться в командной строке для именования файлов данных. Имена файлов:

/ DEV / STDIN

Стандартный ввод.

/ DEV / STDOUT

Стандартный вывод.

/ DEV / STDERR

Стандартный вывод ошибок.

/ DEV / FD /N

Файл, связанный с дескриптором открытого файла n.

Это особенно полезно для сообщений об ошибках. Например:

печать «Ты все испортил!» > «/ dev / stderr»

в то время как в противном случае вам придется использовать

печать «Ты все испортил!» | «кот 1> 2»

Следующие специальные имена файлов могут использоваться с | оператор совместного процесса для создания сетевых соединений TCP / IP.

/ Инет / TCP /LPORT/RHOST/rport

Файл для подключения TCP / IP по локальному порту lport к удаленному хосту rhost на удаленном порту rport. Используйте порт чтобы система выбрала порт.

/ Инет / UDP /LPORT/RHOST/rport

Аналогично, но использовать UDP / IP вместо TCP / IP.

/ Инет / сырые /LPORT/RHOST/rport

Зарезервировано для будущего использования.

Другие специальные имена файлов обеспечивают доступ к информации о запущенном процессе gawk. Эти имена файлов теперь устарели. Использовать PROCINFO массив для получения информации, которую они предоставляют. Имена файлов:

/ DEV / PID

Чтение этого файла возвращает идентификатор текущего процесса в десятичном виде, оканчивающийся символом новой строки.

/ DEV / PPID

Чтение этого файла возвращает идентификатор родительского процесса текущего процесса в десятичном виде, оканчивающийся новой строкой.

/ DEV / pgrpid

Чтение этого файла возвращает идентификатор группы процессов текущего процесса в десятичном виде, оканчивающийся символом новой строки.

/ DEV / пользователь

Чтение этого файла возвращает одну запись, оканчивающуюся новой строкой. Поля разделены пробелами. $ 1 значение системного вызова getuid (2), $ 2 значение системного вызова geteuid (2), $ 3 значение системного вызова getgid (2), и $ 4 значение системного вызова getegid (2). Если есть какие-либо дополнительные поля, они являются идентификаторами групп, возвращаемыми getgroups (2). Несколько групп могут поддерживаться не во всех системах.

Числовые функции

AWK имеет следующие встроенные арифметические функции:

atan2 (Y, Икс)

Возвращает арктангенс y / x в радианах.

соз (выраж)

Возвращает косинус expr, который находится в радианах.

ехр (выраж)

Экспоненциальная функция.

INT (выраж)

Усекает до целого числа.

журнал(выраж)

Функция натурального логарифма.

Rand ()

Возвращает случайное число от 0 до 1.

грех (выраж)

Возвращает синус expr, который находится в радианах.

SQRT (выраж)

Функция квадратного корня.

srand ([Выражение])

Использует expr в качестве нового начального числа для генератора случайных чисел. Если expr не указан, используется время суток. Возвращаемое значение — это предыдущее начальное число для генератора случайных чисел.

Строковые функции

Gawk имеет следующие встроенные строковые функции:

asort (с [, д])

Возвращает количество элементов в исходном массиве s. Содержимое s сортируется с использованием обычных правил gawk для сравнения значений, а индексы отсортированных значений s заменяются последовательными целыми числами, начинающимися с 1. Если указан необязательный целевой массив d, сначала s дублируется в d, а затем d сортируется, оставляя индексы исходного массива s без изменений.

gensub (р, s, ч [, т])

Найдите в целевой строке t совпадения регулярного выражения r. Если h строка, начинающаяся с грамм или же грамм, затем замените все совпадения r на s. В противном случае, h является числом, указывающим, какое совпадение r заменить. Если т не поставляется, $ 0 используется вместо В тексте замены s последовательность \n, где n — это цифра от 1 до 9, может использоваться для обозначения только текста, который соответствует n-му заключенному в скобки подвыражению. Последовательность \ 0 представляет весь сопоставленный текст, как и персонаж . в отличие к югу () а также GSUB (), измененная строка возвращается как результат функции, а исходная целевая строка не изменяется.

GSUB (р, с [, т])

Для каждой подстроки, совпадающей с регулярным выражением r в строке t, подставьте строку s и верните количество подстановок. Если t не указан, используйте $ 0. в тексте замены заменяется текст, который был фактически сопоставлен. использование \ получить буквальный. (Это должно быть напечатано как «\\»; см. GAWK: Эффективное программирование на AWK для более полного обсуждения правил «s и обратный слеш в тексте замены к югу (), GSUB (), а также gensub ().)

индекс(s, T)

Возвращает индекс строки t в строке s или 0, если t нет. (Это означает, что индексы персонажей начинаются с единицы.)

длина ([С])

Возвращает длину строки с или длина $ 0 если s не указан.

матч(s, р [, а])

Возвращает позицию в s, где встречается регулярное выражение r, или 0, если r отсутствует, и устанавливает значения RSTART а также RLENGTH. Обратите внимание, что порядок аргументов такой же, как и для ~ оператор: ул ~ число рейнольдса Если предоставляется массив a, a очищается, а затем элементы 1 через nare заполняются частями s, которые соответствуют соответствующему заключенному в скобки подвыражению в r. 0-й элемент a содержит часть s, совпадающую со всем регулярным выражением r.

Трещина(s, [, р])

Разбивает строку s в массив a по регулярному выражению r и возвращает количество полей. Если r опущено, FS используется вместо Массив a очищается первым. Расщепление ведет себя идентично расщеплению поля, описанному выше.

Sprintf (FMT, список-выражений)

Печатает список expr в соответствии с fmt и возвращает полученную строку.

StrToNum (ул)

Исследует str и возвращает его числовое значение. Если ул начинается с ведущего , StrToNum ()предполагает, что str является восьмеричным числом. Если ул начинается с ведущего 0x или же 0X, StrToNum ()предполагает, что str является шестнадцатеричным числом.

к югу (р, с [, т])

Как GSUB (), но только первая подходящая подстрока заменяется.

зиЬзЬг (s, я [, п])

Возвращает не более n-символьную подстроку s, начиная с i. Если n опущено, используется остальная часть s.

понижать(ул)

Возвращает копию строки str со всеми символами верхнего регистра в str, переведенными в соответствующие им символы нижнего регистра. Неалфавитные символы остаются без изменений.

ToUpper (ул)

Возвращает копию строки str со всеми символами нижнего регистра в str, переведенными в соответствующие им символы верхнего регистра. Неалфавитные символы остаются без изменений.

Функции времени

Поскольку одним из основных применений программ AWK является обработка файлов журналов, которые содержат информацию о метках времени, gawk предоставляет следующие функции для получения меток времени и их форматирования.

mktime (datespec)

Возвращает даты в метку времени той же формы, что и SysTime (). Datepec — это строка вида ГГГГ ММ ДД ЧЧ ММ СС [летнее время]. Содержимое строки представляет собой шесть или семь чисел, представляющих соответственно полный год, включая столетие, месяц от 1 до 12, день месяца от 1 до 31, час дня от 0 до 23, минуты от 0 до 59, и второе от 0 до 60, и необязательный флаг перехода на летнее время. Значения этих чисел не должны находиться в указанных диапазонах; например, час -1 означает 1 час до полуночи. Предполагается, что в исходном нулевом григорианском календаре год 0 предшествует году 1, а год -1 предшествует году 0. Предполагается, что время находится в местном часовом поясе. Если флаг перехода на летнее время положительный, предполагается, что это летнее время; если ноль, время считается стандартным временем; и если отрицательный (по умолчанию), указываете ей () пытается определить, действует ли переход на летнее время в течение указанного времени. Если datepec не содержит достаточно элементов или если полученное время выходит за пределы диапазона, указываете ей () возвращает -1.

STRFTIME ([формат [, метка времени]])

Форматирует метку времени согласно спецификации в формате. Метка времени должна иметь ту же форму, что и SysTime (). Если отметка времени отсутствует, используется текущее время дня. Если формат отсутствует, используется формат по умолчанию, эквивалентный выводу даты (1). Смотрите спецификацию для STRFTIME () функция в ANSI C для преобразований формата, которые гарантированно будут доступны. Общедоступная версия strftime (3) и справочная страница для нее поставляются с gawk; если эта версия использовалась для сборки gawk, то все преобразования, описанные на этой странице руководства, доступны для gawk.

SysTime ()

Возвращает текущее время дня в виде количества секунд с начала эпохи (1970-01-01 00:00:00 UTC в системах POSIX).

Функции управления битами

Начиная с версии 3.1 gawk, доступны следующие функции управления битами. Они работают путем преобразования значений с плавающей запятой двойной точности в без знака долго целые числа, выполняя операцию, а затем преобразовывая результат обратно в число с плавающей запятой. Функции:

а также(v1, v2)

Вернуть побитовое И значений, предоставленных v1 и v2.

компл (вал)

Вернуть побитовое дополнение val.

LShift (вал, подсчитывать)

Возвращает значение val, сдвинутое влево на счетные биты.

или же(v1, v2)

Вернуть побитовое ИЛИ значений, предоставленных v1 и v2.

RShift (вал, подсчитывать)

Возвращает значение val, сдвинутое вправо на количество бит.

исключающее (v1, v2)

Вернуть побитовый XOR значений, предоставленных v1 и v2.

Функции интернационализации

Начиная с версии 3.1 gawk, в вашей программе AWK могут использоваться следующие функции для перевода строк во время выполнения. Для получения полной информации см. GAWK: эффективное программирование AWK.

bindtextdomain (каталог [, домен])

Определяет каталог, где gawk ищет .мо файлы, в случае, если они не будут или не могут быть размещены в «стандартных» местах (например, во время тестирования). Возвращает каталог, в котором домен является « привязанным. »

Домен по умолчанию — это значение ДОМЕН. Если каталог является пустой строкой («»), тогдаbindtextdomain () возвращает текущую привязку для данного домена.

dcgettext (строка [, домен [, категория]])

Возвращает перевод строки в домене текстового домена для категории категории локали. Значением по умолчанию для домена является текущее значение ДОМЕН. Значением по умолчанию для категории является «LC_MESSAGES».

Если вы указываете значение для категории, оно должно быть строкой, равной одной из известных категорий языковых стандартов, описанных в GAWK: Эффективное программирование AWK. Вы также должны предоставить текстовый домен. использование ДОМЕН если вы хотите использовать текущий домен.

dcngettext (строка1, строка2, номер [, домен [, категория]])

Возвращает форму множественного числа, используемую для номера перевода строки1 и строки2 в домене текстового домена для категории категории локали. Значением по умолчанию для домена является текущее значение ДОМЕН. Значением по умолчанию для категории является «LC_MESSAGES».

Если вы указываете значение для категории, оно должно быть строкой, равной одной из известных категорий языковых стандартов, описанных в GAWK: Эффективное программирование AWK. Вы также должны предоставить текстовый домен. использование ДОМЕН если вы хотите использовать текущий домен.

ОПРЕДЕЛЕННЫЕ ПОЛЬЗОВАТЕЛЕМ ФУНКЦИИ

Функции в AWK определены следующим образом:

функция имя(список параметров) { заявления }

Функции выполняются, когда они вызываются из выражений в шаблонах или действиях. Фактические параметры, предоставленные в вызове функции, используются для создания экземпляров формальных параметров, объявленных в функции. Массивы передаются по ссылке, остальные переменные передаются по значению.

Поскольку функции изначально не были частью языка AWK, предоставление локальных переменных довольно неуклюже: они объявлены как дополнительные параметры в списке параметров. Соглашение состоит в том, чтобы отделить локальные переменные от реальных параметров дополнительными пробелами в списке параметров. Например:

функция f (p, q, a, b) # a и b являются локальными
{
...
}
/ abc / {...; f (1, 2); ...}

Левая скобка в вызове функции должна следовать сразу за именем функции, без пробелов. Это позволяет избежать синтаксической неоднозначности с оператором конкатенации. Это ограничение не распространяется на встроенные функции, перечисленные выше.

Функции могут вызывать друг друга и могут быть рекурсивными. Параметры функции, используемые в качестве локальных переменных, инициализируются пустой строкой и нулевым числом при вызове функции.

использование вернуть expr для возврата значения из функции. Возвращаемое значение не определено, если значение не предоставлено, или если функция возвращает « падение » конца.

Если —корпия gawk предупреждает о вызовах неопределенных функций во время разбора, а не во время выполнения. Вызов неопределенной функции во время выполнения является фатальной ошибкой.

Слово FUNC может быть использован вместо функция.

ДИНАМИЧЕСКАЯ ЗАГРУЗКА НОВЫХ ФУНКЦИЙ

Начиная с версии 3.1 gawk, вы можете динамически добавлять новые встроенные функции в работающий интерпретатор gawk. Полная информация выходит за рамки этой страницы руководства; см. GAWK: эффективное программирование AWK для деталей.

расширение (объект, функция)

Динамически свяжите файл общего объекта, названный объектом, и вызовите функцию в этом объекте, чтобы выполнить инициализацию. Оба должны быть представлены в виде строк. Возвращает значение, возвращаемое функцией.

Эта функция предоставляется и документируется в GAWK: Эффективное программирование на AWK, но в следующей версии все об этой функции может измениться. Мы настоятельно рекомендуем вам не использовать эту функцию для чего-либо, что вы не готовы повторить.

СИГНАЛЫ

pgawk принимает два сигнала. SIGUSR1 заставляет его сбросить профиль и стек вызовов функций в файл профиля, который либо awkprof.out, или любой файл был назван с —профиль вариант. Затем он продолжает работать. SIGHUP заставляет его сбросить профиль и стек вызовов функций и затем выйти.

ПРИМЕРЫ

Распечатайте и сортируйте логин всех пользователей:
НАЧАЛО {FS = ":"}
{печать $ 1 | "Сортировать" }
Подсчет строк в файле:
{nlines ++}
END {print nlines}
Перед каждой строкой укажите ее номер в файле:
{печать FNR, $ 0}
Конкатенация и номер строки (вариация на тему):
{print NR, $ 0}

Интернационализация

Строковые константы — это последовательности символов, заключенные в двойные кавычки. В неанглоязычных средах можно пометить строки в программе AWK как требующие перевода на родной естественный язык. Такие строки отмечены в программе AWK начальным подчеркиванием (« _ »). Например,

gawk ‘BEGIN {print «привет, мир»}’

всегда печатает Привет, мир. Но,

gawk ‘BEGIN {print _ «привет, мир»}’

может напечатать Bonjour, Monde во Франции.

Существует несколько этапов создания и запуска локализуемой программы AWK.

1.

Добавить НАЧАТЬ действие для присвоения значения ДОМЕН переменная для установки текстового домена на имя, связанное с вашей программой.

BEGIN {TEXTDOMAIN = «myprog»}

Это позволяет gawk найти .мо файл, связанный с вашей программой. Без этого шага, gawkuses Сообщения текстовый домен, который, скорее всего, не содержит переводов для вашей программы.

2.

Отметьте все строки, которые должны быть переведены с начальным подчеркиванием.

3.

При необходимости используйте dcgettext () и / или bindtextdomain () функции в вашей программе, в зависимости от ситуации.

4.

Бегать gawk —gen-po -f myprog.awk> myprog.po генерировать .ро файл для вашей программы.

5.

Обеспечить соответствующие переводы, а также построить и установить соответствующий .мо файл.

Функции интернационализации подробно описаны в GAWK: Эффективное программирование AWK.

Posix Совместимость

Основная цель gawk — совместимость со стандартом POSIX, а также с последней версией UNIX awk. С этой целью gawk включает в себя следующие видимые для пользователя функции, которые не описаны в книге AWK, но являются частью версии awk Bell Laboratories и соответствуют стандарту POSIX.

Книга указывает, что присвоение переменной командной строки происходит, когда awk иначе открыл бы аргумент как файл, который находится после НАЧАТЬ блок выполнен. Однако в более ранних реализациях, когда такое назначение появлялось перед любыми именами файлов, назначение происходило до НАЧАТЬ блок был запущен. Приложения стали зависеть от этой «функции». Когда awk был изменен в соответствии с его документацией, -v добавлена ​​возможность назначения переменных перед выполнением программы, чтобы приспособить приложения, которые зависели от старого поведения. (Эта функция была согласована как Bell Laboratories, так и разработчиками GNU.)

-W Опция для реализации конкретных функций из стандарта POSIX.

При обработке аргументов gawk использует специальную опцию « — », чтобы указать конец аргументов. В режиме совместимости он предупреждает, но в противном случае игнорирует неопределенные параметры. При нормальной работе такие аргументы передаются в программу AWK для обработки.

Книга AWK не определяет возвращаемое значение srand (). Стандарт POSIX заставляет его возвращать начальное число, которое он использовал, чтобы отслеживать последовательности случайных чисел. Следовательно srand () ingawk также возвращает текущее семя.

Другие новые функции: использование нескольких варианты (от MKS awk); ЭНВАЙРОН массив;\ а, а также \ v экранирующие последовательности (сделанные первоначально в gawk и возвращенные в версию Bell Laboratories); понижать() а также ToUpper () встроенные функции (из версии Bell Laboratories); и спецификации преобразования ANSI C в Printf (сделано первым в версии Bell Laboratories).

Исторические особенности

Есть две особенности исторических реализаций AWK, которые поддерживает gawk. Во-первых, можно назвать длина () встроенная функция не только без аргументов, но даже без скобок! Таким образом,

a = длина # Святой Алгол 60, Бэтмен!

такой же, как любой из

a = длина ()
a = длина ($ 0)

Эта функция помечена как «устаревшая» в стандарте POSIX, и gawk выдает предупреждение о ее использовании, если —корпия указывается в командной строке.

Другой особенностью является использование либо Продолжить или сломать заявления вне телапока, за, или же делать петля. Традиционные реализации AWK рассматривали такое использование как эквивалент следующий заявление. Gawk поддерживает это использование, если —традиционный был указан.

Расширения GNU

Gawk имеет ряд расширений для POSIX awk. Они описаны в этом разделе. Все расширения, описанные здесь, можно отключить, вызвав gawk с —традиционный вариант.

Следующие функции gawk недоступны в POSIX awk.

*

Поиск файлов по именам через вариант. Следовательно AWKPATHПеременная окружения не является особенной.

*

\Икс escape-последовательность (Отключено с —POSIX.)

*

fflush () функция. (Отключено с —POSIX.)

*

Возможность продолжить линии после ? а также :. (Отключено с —POSIX.)

*

Восьмеричные и шестнадцатеричные константы в программах AWK.

*

ARGIND, BINMODE, ERRNO, LINT, RT а также ДОМЕН переменные не являются специальными.

*

IGNORECASE Переменная и ее побочные эффекты недоступны.

*

FIELDWIDTHS разделение поля переменной и фиксированной ширины.

*

PROCINFO массив недоступен.

*

Использование RS как регулярное выражение.

*

Специальные имена файлов, доступные для перенаправления ввода / вывода, не распознаются.

*

| оператор для создания совместных процессов.

*

Возможность выделения отдельных символов с использованием нулевой строки в качестве значения FS, и в качестве третьего аргумента Трещина().

*

Необязательный второй аргумент близко() функция.

*

Необязательный третий аргумент матч() функция.

*

Возможность использовать позиционные спецификаторы с Printf а также Sprintf ().

*

Использование удалять массив для удаления всего содержимого массива.

*

Использование nextfile отказаться от обработки текущего входного файла.

*

а также(), asort (), bindtextdomain (), компл (), dcgettext (), gensub (), LShift (),указываете ей (), или же(), RShift (), STRFTIME (), StrToNum (), SysTime () а также XOR () функции.

*

Локализуемые строки.

*

Добавление новых встроенных функций динамически с расширение () функция.

Книга AWK не определяет возвращаемое значение близко() функция. Gawk-х близко() возвращает значение из fclose (3) или pclose (3) при закрытии выходного файла или канала соответственно. Возвращает статус выхода процесса при закрытии входного канала. Возвращаемое значение равно -1, если именованный файл, канал или совместный процесс не был открыт с перенаправлением.

Когда gawk вызывается с —традиционный вариант, если аргумент fs -F опция « t », тогда FS устанавливается на символ табуляции. Обратите внимание, что печатать gawk -F \ t … просто заставляет оболочку заключать в кавычки « t, » и не передает « \ t » -F вариант. Поскольку это довольно уродливый особый случай, это не поведение по умолчанию. Такое поведение также не происходит, если —POSIX был указан. Чтобы действительно получить символ табуляции в качестве разделителя полей, лучше всего использовать одинарные кавычки: gawk -F ‘\ t’ ….

Смотрите другие команды: wait, lp, complete, execv, getfacl, ioctl, uniq, rmmod, pvcreate, rsh, unix2dos, cal, fs, cd, iwpriv, swapon, autofs, talk, motd, free, lpr, execl, fdisk, at, who iwconfig, ifconfig, vgdisplay, open, lsmod, ntohs, mailq, kill, wtmp

Ссылка на основную публикацию