MAN awk 1
Материал из Gentoo Linux Wiki
- Вернуться в раздел мануалов
Пожалуйста приведите эту статью в соответствиe с wiki разметкой, и затем удалите {{Wikify}} из текста статьи
- Вернуться в раздел мануалов
[править] Имя
gawk - язык сканирования и обработки шаблонов
[править] Синтаксис
gawk [ опции в стиле POSIX или GNU ] -f program-file [ -- ] file ... gawk [ опции в стиле POSIX или GNU ] [ -- ] program-text file ... pgawk [ опции в стиле POSIX или GNU ] -f program-file [ -- ] file ... pgawk [ опции в стиле POSIX или GNU ] [ -- ] program-text file ...
[править] Описание
Gawk это GNU реализация языка программирования AWK. Она совместима с определением языка в стандарте POSIX 1003.2 "Command Language And Utilities Standard". Эта версия в свою очередь базируется на описании "The AWK Programming Language" Э.Ахо, Б.Кернигана и П.Вайнбергера, с дополнительными возможностями найдеными в System V Release 4 версии UNIX awk. Gawk также поддерживает расширения для AWK компании Bell Laboratories, и множество расширений специфичных для GNU.
Pgawk это профильная версия gawk. Она идентична gawk, за исключением того, что запускается намного медленее , и автоматически создает профиль выполнения в файле awkprof.out, при успешном выполнении. Смотриие также опцию --profile.
Командная строка состоит из опций для gawk, текста программы AWK (если не указаны опции -f или --file, и значения которые будут доступны через предопределенные переменные ARGC и ARGV языка AWK.
[править] Опции
- {--field-separator fs | -F fs}
- Эта опция устанавливает разделитель fs в качестве разделителя полей в записи (это значение предустановленной переменной FS).
- {--assign var=val | -v var=val}
- Присваивает значение val переменной var, перед выполнением программы. Такие переменные доступны в блоке BEGIN AWK программы .
- {--file program-file | -f program-file}
- Читает исходный код AWK программы из файла program-file, instead of from the first command line argument. Разрешается множественное использование опции.
- {-mf NNN | -mr NNN}
- Установка различных ограничений памяти в значение NNN. Флаг f устанавливает максимальное число записей, а флаг r максимальный размер записи. Эти два флага и опция -m позаимствованы из Bell Laboratories research версии awk Unix. Они игнорируются gawk, так как gawk не имеет никаких предопределенных ограничений.
- {--compat | -W compat | -W traditional | --traditional}
- Запуск в режиме совместимости. В режиме совместимости, gawk ведет себя идентично с Unix awk; не поддерживая расширения GNU. Ипользование опции --traditional, предпочтительнее других ее форм.
- {--copyleft| -W copyleft | --copyright | -W copyright }
- Выводит краткую версию сообщения информации об авторских правах GNU на стандартный вывод и завершает работу.
- {--dump-variables[=file] | -W dump-variables[=file]}
- Выводит краткий список глобальных переменных, их типов и окончательных значений в файл file. Если файл не указан, gawk использует файл с именем awkvars.out в текущей директории.
Иметь список всех глобальных переменных - это хороший метод обнаружить ошибку в Вашей программе. Вы должны также использовать эту опцию, если есть большая программа с большим количеством функций, и Вы хотите убедиться, что Ваши функции неосторожно не используют глобальные переменные, которые должны быть локальными.
- {--help | -W help | --usage | -W usage}
- Выводит на стандартный вывод относительно короткое резюме доступных опций.
- {--lint[=value] | -W lint[=value]}
- Выдает предупреждения о сомнительных или непортируемых конструкциях в другие AWK реализации. С дополнительным аргументом fatal, предупреждения становятся критическими ошибками. Эта опция не обязательна, но ее использование приведет к развитию более "чистых" AWK программ. С дополнительным аргументом invalid, будут выдаваться только предупреждения о вещах, которые являются фактически недействительными.
- {--lint-old | -W lint-old }
- Выводит предупреждения о конструкциях которые не совместимы с оригинальной версией Unix awk.
- {--gen-po | -W gen-po}
- Сканирует программу AWK, и выводит сгенерированый файл в формате GNU .po на стандартный вывод с вхождениями для всех локализированых строк в программе. Сама программа останется не выполнена. Смотрите GNU gettext(1) для получения более детальной информации о .po файлах.
- {--non-decimal-data | -W non-decimal-data}
- Распознает восьмиричные и шестнадцатеричные значения во входящих данных.
| Предупреждение: Используйте эту опцию с большим предостережением! |
- {--posix | -W posix}
- Включает режим совместимости, с дополнительными ограничениями:
- не распознаются escape-последоавтельности \x .
- Только пробел и табуляция действуют как поле разделитель, когда FS установлена в одиночный пробел, символ новой строки - нет.
- Вы не можете продолжать строку после символов ? и :.
- Не распознается синоним func для ключевого слова function.
- Операторы ** и **= не могут использоваться вместо ^ и ^ =.
- Функция fflush() недоступна.
- {--profile[=prof_file] | -W profile[=prof_file] }
- Отправить профильные данные в файл prof_file. Если не указано иное, то по умолчанию в файл с именем awkprof.out. Если запускается gawk, в файле содержится "правильно форматированная" версия программы. Если запускается pgawk, то профильные данные содержат счетчики выполнения каждого утверждения в программе в левой части и счетчик вызова функции для каждой определенной пользователем функции.
- {--re-interval | -W re-interval}
- Enable the use of interval expressions in regular expression matching (see Regular Expressions, below). Interval expressions were not traditionally available in the AWK language. The POSIX standard added them, to make awk and egrep consistent with each other. However, their use is likely to break old AWK programs, so gawk only provides them if they are requested with this option, or when --posix is specified.
- {--source program-text | -W source program-text}
- Использовать program-text как исходный код программы AWK. Эта опция разрешает простое объединение библиотечных функций (подключаемых с помощю опций --file_program-file и --file_program-file с исходным кодом в командной строке.
| Примечание: Это предназначено прежде всего для средних и больших AWK программ используемых в скриптах коммандной оболочки. |
- { --version | -W version}}
- Выводит информацию о версии.
- --
- Сигнализирует про окончание опций. Это полезно, если дальнейшие аргументы для программы AWK непосредственно начинаются с символа "-". This is mainly for consistency with the argument parsing convention used by most other POSIX programs. In compatibility mode, any other options are flagged as invalid, but are otherwise ignored. In normal operation, as long as program text has been supplied, unknown options are passed on to the AWK program in the ARGV array for processing. This is particularly useful for running AWK programs via the "#!" executable interpreter mechanism.
[править] Выполнение AWK программы
[править] Переменные, записи и поля
Переменные в AWK динамические; они создаются при первом использовании. Переменные и поля могут быть числами с плавающей запятой, строками или и тем, и другим одновременно, в зависимости от того, как их использовать. Тип переменной зависит от контекста. В числовых выражениях переменная считается числом, в строковых - строкой. AWK также имеет одномерные массивы; многомерные массивы могут быть смоделированы. Некоторые предопределенные переменные устанавливают как работает программа; они будут описаны как необходимо ниже.
[править] Записи
По умолчанию записи разделяются символом новой строки. Вы можете определить способ разделения записей, присвоив нужное значение встроенной переменной RS. Если значение RS какой-нибудь одиночный символ, то он будет использоваться для разделения записей. В противном случае RS - это регулярное выражение. Текст входного потока, совпавший с регулярным выражением, будет разделен на записи. В режиме совместимости для разделения записей будет использоваться только первый символ строки выражения. Если RS - пустая строка, то записи будут разделяться пустыми строками. При этом символ новой строки всегда будет работать как разделитель полей, в дополнение к значению FS.
[править] Поля
Каждую входящую запись gawk разбивает на поля, используя значение переменной FS в качестве разделителя. Если значение FS - единичный символ, то поля разделяются этим символом. Если значение FS - пустая строка, то каждый символ считается отдельным полем. В противном случае, FS считается полным регулярным выражением. Исключение составляет случай, когда значение FS - один пробел. При этом поля разделяются комбинациями пробелов и/или символов табуляции, и/или символами новой строки. (Смотрите также опцию --posix.)
| Примечание: Заметьте, что значение IGNORECASE также будет влиять на разделение полей, если FS - регулярное выражение, и на разделение записей, если RS - регулярное выражение. |
Если переменная FIELDWIDTHS содержит список чисел, разделенных пробелами, то gawk считает ширину каждого поля фиксированной и разделяет запись в соответствие c указанными значениями. Значение переменной FS в этом случае игнорируется. Присваивание нового значения переменной FS аннулирует использование FIELDWIDTHS и восстанавливает поведение, принятое по умолчанию.
На любое поле входящей записи можно ссылаться по его позиции - $1, $2, и так далее. $0 ссылается на всю входящюю запись. Кроме того, любому полю можно присвоить значение. Для ссылок на поля необязательно использовать константы. Например:
n = 5 print $n
выведет пятое поле записи. Переменная NF содержит количество полей входной записи.
Результатом ссылки на несуществующее поле (т. е. поле с номером, превышающим $NF является пустая строка. Присваивание значения несуществующему полю (например, $(NF+2) = 5) увеличивает значение NF и создает промежуточные поля с пустой строкой в качестве значения. Содержимое переменной OFS используется в качестве разделителя полей. Значение $0 вычисляется заново. Ссылка на поля с отрицательными номерами является ошибкой. Уменьшение значения NF вызывает потерю значений полей с номерами, превышающими новое значение. Значение $0 вычисляется заново, поля разделяются содержимым переменной OFS.
[править] Встроенные переменные
Gawk имеет следующие встроенные переменные:
- ARGC
- Число аргументов командной строки (не включая опции gawk, или исходный код).
- ARGIND
- Индекс массива ARGV, указывающий на обрабатываемый в данный момент файл.
- ARGV
- Массив аргументов командной строки. Массив ARGV имеет индексы от 0 до ARGC - 1.
- BINMODE
- CONVFMT
- Формат преобразования для чисел. По умолчанию "%.6g".
- ENVIRON
- Массив содержащий значения текущих переменных окружения. Индекс массива это название переменной, каждый элемент содержит значение соответствующей переменной окружения (например, ENVIRON["HOME"] может иметь значение /home/alexey). Изменение содержимого этого массива не влияет на значения переменных окружения, доступных для программам, запускаемыми из gawk с помощью функции system().
- ERRNO
- Если возникает системная ошибка при перенаправлении для getline, при чтении для getline, или при вызове close(), то ERRNO будет содержать строку, которая описывает ошибку.
- FIELDWIDTHS
- Список длин полей, разделенный пробелами. Если этой переменной присваивается новое значение, то gawk разделяет входные данные на поля фиксированной длины, при этом значение переменной FS игнорируется.
- FILENAME
- Имя файла, обрабатываемого в данный момент. Если в командной строке не было указано ни одного файла, то значение FILENAME равно "-". Однако, в блоке BEGIN переменная FILENAME не определена (если не установлено getline).
- FNR
- Номер входной записи в текущем входном файле.
- FS
- Разделитель полей во входном потоке, по умолчанию пробел. Смотрите также Поля.
- IGNORECASE
- Контролирует зависимость всех регулярных выражений и строковых операций от регистра. Если значение IGNORECASE не равно нулю, то при работе с регулярными выражениями регистр будет игнорироваться в следующих случаях:
- при сравнении строк и проверке шаблонов в правилах;
- при разделении на поля с использованием значения FS;
- при разделении на записи с использованием значения RS;
- в регулярных выражениях c ~ и !~;
- во встроенных функциях gensub(), gsub(), index(), match(), split() и sub().
Таким образом, если значение IGNORECASE не равно нулю, то /aB/ совпадет с любой строкой из "ab", "aB", "Ab" или "AB". Как и у всех переменных AWK, начальное значение IGNORECASE равно 0, так что все операции со строками и регулярными выражениями изначально чувствительны к регистру. В Unix при игнорировании регистра используется полный набор символов ISO 8859-1 Latin-1. С gawk версии 3.1.4, сравнение символов полностью совметимо с локалью, основано на библиотечных (<ctype.h>) функциях языка C isalpha(3) и tolupper(3).
- LINT
- Предоставляет динамическое управление опцией --lint из AWK программы. Если ее значение истина, то gawk выводит предупреждения, если ложь то нет. Ели присвоить этой переменной строковое значение "fatal", пердупреждения станут критическими ошибками, аналогично --lint=fatal. Любое другое истиное значение означает вывод предупреждений.
- NF
- Количество полей в текущей входной записи.
- NR
- Общее количество встреченных записей.
- OFMT
- Формат вывода для чисел. По умолчанию "%.6g".
- OFS
- Разделитель полей в выходном потоке, по умолчанию пробел.
- ORS
- Разделитель выходных записей. По умолчанию символ новой строки.
- PROCINFO
- Элементы этого массива предоставляют доступ к информации о запущенной AWK программе. В некоторых системах, это могут быть элементы в массиве, от "group1" до "groupn" для некоторых n, которые являются числом групп которые содержит процесс. Используйте оператор in для проверки этих элементов. Следующие элементы гарантировано будут доступны:
- PROCINFO["egid"] - значение возвращаемое системным вызовом getegid(2).
- PROCINFO["euid"] - значение возвращаемое системным вызовом geteuid(2).
- PROCINFO["FS"]- "FS" если поля разделяются FS, или "FIELDWIDTHS" если поля разделяются FIELDWIDTHS.
- PROCINFO["gid"] - значение возвращаемое системным вызовом getgid(2).
- PROCINFO["pgrpid"] - идентификатор группы процессов для текущего процесса.
- PROCINFO["pid"] - идентификатор текущего процесса.
- PROCINFO["ppid"] - идентификатор родителя текущего процесса.
- PROCINFO["uid"]- значение возвращаемое системным вызовом getuid(2).
- PROCINFO["version"] - версия gawk.
- RS
- Разделитель входных записей. По умолчанию символ новой строки.
- RT
- Конец записи. Gawk присваивает RT значение входного текста, совпавшего с символом или регулярным выражением, содержащимся в RS.
- RSTART
- Индекс первого символа, совпавшего при вызове match(). 0, если совпадения не было.
- RLENGTH
- Длина строки, совпавшей при вызове match(). -1, если совпадения не было.
- SUBSEP
- Символ, используемый для разделения элементов в массиве. По умолчанию "\034".
- TEXTDOMAIN
- Домен для программы AWK; используется для поиска локализированого перевода строк программы.
[править] Массивы
Массивы индексируются по выражению, указанному между квадратными скобками ([ и ]). Если выражение это списком выражений (выражение, выражение ...), то массив индексируется по строке, состоящей из сцепленных (строковых) значений всех выражений, разделенных значением переменной SUBSEP. Эта возможность используется для моделирования многомерных массивов. Например:
i = "A"; j = "B"; k = "C" x[i, j, k] = "hello, world\n"
присваивает элементу массива x, индексированного по строке "A\034B\034C", строку "hello, world\n". Все массивы в AWK ассоциативны, т.е. индексируются по строковым значениям.
Для проверки существования в массиве определенного индекса в операторах if и while может быть использован специальный оператор in.
if (val in array)
print array[val]
Если массив многомерный, используйте:
(i, j) in array.
Конструкция in может быть также использована в цикле for для перебора всех элементов массива.
Элемент может быть удален из массива оператором delete. Кроме того, оператор delete может быть использован для удаления всего массива. Для этого нужно указать имя массива без индекса.
[править] Типы переменных и преобразования
Переменные и поля могут быть числами с плавающей запятой, строками или и тем, и другим одновременно. Тип переменной зависит от контекста. В числовых выражениях переменная считается числом, в строковых - строкой.
Если вы хотите, чтобы переменная считалась числом, добавьте к ней 0. Если вы хотите, чтобы переменная считалась строкой, сцепите ее с пустой строкой.
Конвертирование строки в число производится с помощью atof(3). Конвертирование числа в строку производится с помощью sprintf(3), путем использования значения CONVFMT в качестве строки форматирования, и числового значения переменной в качестве аргумента. Хотя все числа в AWK считаются числами с плавающей запятой, целые значения всегда преобразуются как целые. Поэтому в
CONVFMT = "%2.2f" a = 12 b = a ""
строковое значение переменной b будет "12", а не "12.00".
Gawk выполняет сравнения следующим образом:
- если две переменные имеют числовое значение, то они сравниваются как числа;
- если одна переменная имеет числовое значение, а вторая является "строкой-числом" (т.е. строкой, состоящей из цифр), то переменные сравниваются как числа. Во всех остальных случаях производится преобразование числа в строку, и переменные сравниваются как строки. Две строки, естественно, сравниваются как строки. В соответствие со стандартом POSIX, даже если две строки являются "строками-числами", то они сравниваются как числа. Но это, безусловно, неправильно, поэтому gawk не делает этого.
Заметьте, что строковые константы, такие как "57", не являются "строками-числами", а именно строковыми константами. Термин "строка-число" применим лишь к полям, входным данным getline, FILENAME, элементам ARGV, элементам ENVIRON и тем элементам массива, созданного split, которые являются числовыми строками. Основная идея в том, что таким образом интерпретируется только входная информация пользователя, выглядящая, как число.
Переменные, неинициализированные явно, имеют числовое значение 0 и строковое значение "" (пустая строка).
[править] Восьмиричные и шестнадцатиричные константы
[править] Строковые константы
[править] Шаблоны и действия
[править] Шаблоны
[править] Регулярные выражения
[править] Действия
[править] Операторы
[править] Управляющие последовательности
[править] Операторы ввода/вывода
Имеются следующие операторы ввода/вывода:
- close(filename)
- Закрыть файл или канал с именем filename.
- getline
- Считать следующую входящую запись в $0, установить NF, NR, FNR.
- getline <file
- Считать следующую входящую запись файла file в $0, установить NF.
- getline var
- Считать следующую входящую запись в переменную var, установить NR, FNR.
- getline var <file
- Считать следующую входящую запись файла file в переменную var, установить NR, FNR.
- next
- Прекратить обработку текущей входящей записи, cчитать следующую входящую запись и начать ее обработку с первого шаблона программы AWK. Если обработаны все входящие данные, то выполнить блок(и) END, если они существуют.
- nextfile
- Прекратить обработку текущего входящего файла, следующая входящая запись считывается со следующего входящего файла. Обновляются переменные FILENAME и ARGIND, FNR устанавливается в 1, обработка начинается с первого шаблона программы AWK. Если обработаны все входящие данные, то выполнить блок(и) END, если они существуют.
| Примечание: В ранних версиях gawk использовалась конструкция next file. Хотя эта конструкция все еще распознается, выдается предупреждающее сообщение. В дальнешем она поддерживаться не будет. |
- Вывести текущую запись. Запись оканчивается содержимым переменной ORS.
- print expr-list
- Вывести выражение. Выражения разделяются содержимым переменной OFS. Запись оканчивается содержимым переменной ORS.
- print expr-list >file
- Вывести выражения в файл file.
- printf fmt, expr-list
- Отформатировать и вывести выражения.
- printf fmt, expr-list >file
- Отформатировать и вывести выражения в файл file.
- system(cmd-line)
- Выполнить команду cmd-line и вернуть код завершения команды. (Может быть недоступна на не-POSIX системах.)
- fflush([file])
- Сбросить буфера, связанные с открытым для записи файлом или каналом file. Если файл не указан, происходит сброс буферов стандартного потока вывода. Если файл - пустая строка, то происходит сброс буферов всех открытых файлов и каналов.
[править] The printf Statement
[править] Специальные имена файлов
[править] Арифметические функции
[править] Строковые функции
[править] Функции для работы со временем
[править] Функции для манипуляции с битами
[править] Функции интернационализации
[править] Функции определяемые пользователем
[править] Динамическая загрузка новых функций
[править] Сигналы
pgawk принимает 2 вида сигналов. SIGUSR1 заставляет его сбросить профиль и стек вызовов функций в файл профиля, который называется awkprof.out, либо имя, указанное в опции --profile. Далее выполнение продолжается. SIGHUP заставляет его сбросить профиль и стек вызовов функций и затем выйти.
[править] Примеры
Напечатать и отсортировать логины всех пользователей:
BEGIN { FS = ":" }
{ print $1 | "sort" }
Сосчитать количество строк в файле:
{ nlines++ }
END { print nlines }
Предварить каждую строку её номером в файле:
{ print FNR, $0 }
Объединить и пронумеровать (вариация на тему):
{ print NR, $0 }
Запустить внешнюю команду для определенных строк данных:
tail -f access_log |
awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'
[править] Интернационализация
Строковые константы это последовательность символов, заключенных в двойные кавычки. В не-англоязычной языковой среде, можно помечать строки в тексте программы AWK как требующие перевода на местный язык. Такие строки помечаются подчеркиванием перед строкой ("_"). Например,
gawk 'BEGIN { print "hello, world" }'
всегда напечатает "hello, world". Но,
gawk 'BEGIN { print _"hello, world" }'
должно напечатать "привер, мир" в России.
Чтобы создать и запустить локализованную AWK программу, нужно сделать несколько шагов:
1. Добавьте действие BEGIN, чтобы присвоить значение переменной TEXTDOMAIN, чтобы установить текстовую область, связанную с именем вашей программы.
BEGIN { TEXTDOMAIN = "myprog" }
Это позволит gawk найти файл .mo, связанный с вашей программой. Без этого шага, gawk будет использовать текстовую облать сообщений, которая наверняка не содержит перевода для вашей программы.
2. Пометьте все строки, нуждающиеся в переводе, лидирующим знаком подчеркивания.
3. Если нужно, используйте функции dcgettext() и/или bindtextdomain() в вашей программе.
4. Выполните
gawk --gen-po -f myprog.awk > myprog.po
чтобы создать .po-файл для вашей программы.
5. Сделайте нужные переводы и сделайте и установите соответствующий .mo-файл.
Более подробно процесс интернационализации описан в GAWK: Effective AWK Programming (GAWK: Эффективное программирование на AWK).
[править] Posix совмесимость
Главная задача для gawk - совместимость как с POSIX стандартом, так и с последней версией UNIX awk. Для этого, gawk включает в себя следующие функции, не описанные в Книге AWK, но входящие в Bell Laboratories версию awk, и имеющиеся в стандарте POSIX.
В книге сказано, что присваивание значений переменным, указанным в командной строке, происходит перед открытием awk файла, что происходит после выполнения блока BEGIN. Однако в ранних реализациях, если такое присваивание значений переменным было указано до имен файлов, присваивание происходило до выполнения блока BEGIN. Эта "возможность" стала применяться в приложениях. После того, как awk был приведен в соответствие с документацией, для удовлетворения нужд приложений, зависимых от старого поведения, была добавлена опция -v. (С введением этой возможности согласились как разработчики AT&T, так и GNU.)
Опция -W для реализации особенностей взята из стандарта POSIX.
При обработке аргументов gawk использует специальную опцию -- для указания конца аргументов. В режиме совместимости будет выдаваться предупреждение о существовании неизвестных опций, но они будут игнорироваться. В обычном режиме такие аргументы передаются для обработки программе AWK.
В соответствие с книгой по AWK, значение, возвращаемое srand(), не определено. В стандарте POSIX возвращается предыдущее значение, что позволяет следить за последовательностью случайных чисел. Поэтому srand() в gawk также возвращает значение текущей базы.
Другие новые возможности: использование нескольких опций -f (из MKS awk); массив ENVIRON; экранирующие последовательности \a и \v (изначально появившиеся в gawk и затем включенные в AT&T); функции tolower() и toupper() (из AT&T); параметры форматирования ANSI C printf (впервые появившиеся в версии AT&T).
[править] Исторические возможности
Есть две функции исторических реализаций AWK, которые поддерживает gawk. Во-первых, можно вызывать встроенную функцию length() не только без аргументов, но и без скобок! Соответственно,
a = length # Holy Algol 60, Batman!
то же самое, что и любая строчка из
a = length() a = length($0)
Эта функция помечена в POSIX стандарте как "осуждаемая", и gawk выдает предупреждение при её использовании, если в командной строке указана опция --lint.
Другая функция - использование операторов continue либо break вне тела циклов while, for или do. Традиционные реализации AWK трактовали такое использование как эквивалент оператора next. Gawk поддерживает такое использование, если указана опция --traditional.
[править] Расширения GNU
Gawk имеет некоторые расширения по сравнению с POSIX-версией awk. Они описаны в этом разделе. Все эти расширения могут быть отключены вызовом gawk с опцией --traditional.
Следующие функции gawk отсутствуют в POSIX awk.
- Не производится поиск по пути файлов, указанных через опцию -f. Как следствие, переменная окружения AWKPATH не имеет специального значения.
- Экранирующая последовательность \x. (Отключается при использовании --posix.)
- Функция fflush(). (Отключается при использовании --posix.)
- Возможность продолжать строку после ? и :. (Отключается при использовании --posix.)
- Восьмеричные и шестнадцатиричные константы в AWK программах.
- Переменные ARGIND, BINMODE, ERRNO, LINT, RT и TEXTDOMAIN не являются особыми.
- Не обрабатывается переменная IGNORECASE.
- Переменная FIELDWIDTHS и разделение на поля с фиксированной шириной.
- Отсутствует массив PROCINFO.
- Использование RS как регулярных выражений.
- Специальные имена файлов для перенаправления ввода/вывода не распознаются.
- Оператор |& для создания со-процессов.
- Возможность разделения на отдельные символы путем присваивания пустого значения переменной FS или третьему аргументу split().
- Необязательный второй аргумент функции close().
- Необязательный третий аргумент функции match().
- Возможность использовать позиционные спецификаторы в printf и sprintf().
- Использование delete массив чтобы удалить всё содержимое массива.
- Использование nextfile для прерывания обработки текущего входного файла.
- Функции and(), asort(), asorti(), bindtextdomain(), compl(), dcgettext(), dcngettext(), gensub(), lshift(), mktime(), or(), rshift(), strftime(), strtonum(), systime() и xor().
- Локализуемые строки.
- Динамическое добавление новых встроенных функций с помощью функции extension().
Книга AWK не определяет возвращаемое значение функции close(). Версия gawk возвращает значение, полученное от fclose(3), или pclose(3), когда закрывается выходной файл или канал, соответственно. Она возвращает выходное значение процесса, когда закрывается входной канал. Возвращаемое значение равно -1, если файл, канал или со-процесс не были открыты с перенаправлением.
Если при запуске gawk с опцией --traditional, аргумент fs опции -F имеет значение "t", то значением FS будет символ табуляции. Заметьте, что gawk -F\t ... приведет лишь к экранированию символа "t", а не к передаче "\t" опции -F. Так как это довольно специфический случай, то он не является поведением по умолчанию. Он также не будет работать, если указана опция --posix. Если вам действительно нужно использовать символ табуляции в качестве разделителя полей, то лучше всего воспользоваться кавычками: gawk -F'\t' ....
Если при установке gawk была указана опция --enable-switch команде configure, тогда gawk понимает дополнительный оператор управления:
switch (expression) {
case value|regex : statement
...
[ default: statement ]
}
[править] Переменные окружения
Переменная окружения AWKPATH может быть использована для указания списка директорий, в которых gawk ищет файлы, указанные в опциях -f и --file.
Если в переменных окружения присутствует POSIXLY_CORRECT, тогда gawk ведет себя, как если бы опция --posix была указана в командной строке. Если указана опция --lint, gawk выдает предупреждающее сообщение о таком эффекте.
[править] Смотрите также
[править] Ошибки
The -F option is not necessary given the command line variable assignment feature; it remains only for backwards compatibility.
Syntactically invalid single character programs tend to overflow the parse stack, generating a rather unhelpful message. Such programs are surprisingly difficult to diagnose in the completely general case, and the effort to do so really is not worth it.
[править] Авторы
The original version of UNIX awk was designed and implemented by Alfred Aho, Peter Weinberger, and Brian Kernighan of Bell Laboratories. Brian Kernighan continues to maintain and enhance it.
Paul Rubin and Jay Fenlason, of the Free Software Foundation, wrote gawk, to be compatible with the original version of awk distributed in Seventh Edition UNIX. John Woods contributed a number of bug fixes. David Trueman, with contributions from Arnold Robbins, made gawk compatible with the new version of UNIX awk. Arnold Robbins is the current maintainer.
The initial DOS port was done by Conrad Kwok and Scott Garfinkle. Scott Deifik is the current DOS maintainer. Pat Rankin did the port to VMS, and Michal Jaegermann did the port to the Atari ST. The port to OS/2 was done by Kai Uwe Rommel, with contributions and help from Darrel Hankerson. Fred Fish supplied support for the Amiga, Stephen Davies provided the Tandem port, and Martin Brown provided the BeOS port.
[править] Версия
Это руководство описывает gawk, версии 3.1.4.
