Руководство пользователя для GNU Awk

Arnold D. Robbins
перевод Балуева А. Н.

Оглавление

17. Эволюция языка awk

В этой книге описана реализация GNU языка awk, которая следует спецификациям POSIX. Многие пользователи awk знакомы только с оригинальной реализацией awk в версии Version 7 Unix. (Эта реализация была базисом для awk в Berkeley Unix через 4.3-Reno. Выпуск 4.4 Berkeley Unix использует gawk 2.15.2 для их версии awk.) Настоящая глава коротко описывает эволюцию языка awk, с ссылками на другие части книги, где вы можете найти больше информации.

17.1 Главные различия между V7 и SVR3.1

В начало страницы

Язык awk развивался в основном между выпуском версии 7 Unix (1978) и новой версией, впервые ставшей общедоступной в System V Release 3.1 (1987). В этом разделе подводятся итоги изменениям с отсылкой за деталями к другим разделам книги.

Требование `;' для разделения правил в строке (см, раздел 2.6 [операторы awk и строки], стр. 17).

Определенные пользователем функции и операторы return (см. главу 13 [Функции, определенные пользователем], стр. 153).

Оператор delete (см. раздел 11.6 [Оператор delete], стр. 128).

Операторы do-while (см. раздел 9.3 [Операторы do-while], стр. 106).

Встроенные функции atan2, cos, sin, rand и srand (см. раздел 12.2

[Числовые встроенные функции], стр. 136).

Встроенные функции gsub, sub и match (см, раздел 12.3 [Встроенные функции для действий с цепочками], стр. 137).

Встроенные функции close и system (см. раздел 12.4 [Встроенные функции ввода/вывода], стр. 146).

Встроенные переменные ARGC, ARGV, FNR, RLENGTH, RSTART и SUBSEP (см. главу 10 [Встроенные переменные], стр. 115).

Условные выражения с трехзначным оператором `?:' (см. раздел 7.12 Условные выражения], стр. 92).

Экспоненциальный оператор `^' (см. раздел 7.5 [Арифметические операторы], стр. 82) и его оператор присваивания `^=' (см. раздел 7.7 [Присваивающие выражения], стр., 84).

Cи-совместимый приоритет операторов, нарушающий некоторые старые awk-программы (см. раздел 7.14 [Приоритет операторов (Последовательность их выполнения)], стр. 94).

Регулярные выражения (Regexps) как значение FS (см. раздел 5.5 [Спецификация того, как разделяются поля], стр. 44), и как третий аргумент функции split (см. раздел 12.3 [Встроенные функции для действий с цепочками], стр. 137).

Динамические regexps как операнды операторов `~' и `!~' (см. раздел 4.1 [Как употреблять регулярные выражения], стр. 23).

Управляющие последовательности `"b', `"f' и `"r' (см. раздел 4.2 [Управляющие последовательности], стр.24). (Некоторые поставщики исправляют свои старые версии awk для обнаружения `"r', `"b' и `"f', но на это не стоит полагаться.

Перенаправление ввода для функции getline (см. раздел 5.8 [Явный ввод по getline], стр. 53). Кратные BEGIN и END правила (см. раздел 8.1.5 [Специальные образцы BEGIN и END], стр. 100). Многомерные массивы (см. раздел 11.9 [Многомерные массивы], стр. 130).

17.2 Изменения от SVR3.1 к SVR4

В начало страницы

Выпуск 4 системы V версии Unix awk добавил следующие возможности (некоторые из них возникли в gawk):

Переменная ENVIRON (см. главу 10 [Встроенные переменные], стр. 115).

Кратные параметры `-f' в командной строке (см. раздел 14.1 [Параметры командной строки], стр. 161).

Параметр `-v' для присваивания значений переменным до начала выполнения программы (см. раздел 14.1 [Параметры командной строки], стр. 161).

Параметр `--' для завершения параметров в командной строке.

Управляющие последовательности `"a', `"v' и `"x' (см, раздел 4.2 [Управляющие последовательности], стр. 24).

Определенное возвращаемое значение для встроенной функции srand (см. раздел 12.2 [Численные встроенные функции], стр. 136).

Встроенные цепочечные функции toupper и tolower для изменения регистров (см. раздел 12.3 [Встроенные функции для действий с цепочками], стр. 137).

Указания по очистке для буквы `%c' контроля формата в функции printf (см. раздел 6.5.2 [Буквы управления форматом], стр. 65).

Способность динамической передачи ширины поля и точности ("%*.*d") в списке аргументов функции printf (см. раздел 6.5.2 [Буквы управления форматом], стр. 65).

Употребление констант regexp, таких как /foo/, в качестве выражений, где они эквивалентны употреблению операторов соответствия, как в `$0 ~ /foo/' (см. раздел 7.2 [Использование констант регулярных выражений], стр. 78).

17.3 Расхождения между SVR4 и POSIX awk

В начало страницы

Командный язык POSIX и стандартные утилиты для awk внесли следующие изменения в язык:

Употребление `-W' для специальных параметров реализации.

Использование CONVFMT для управления переходом чисел в цепочки (см. раздел 7.4 [Преобразования чисел в цепочки], стр. 81).

Понятие числовых цепочек и уточнение правил сравнения для них (см. раздел 7.10 [Печать переменных и сравнительные выражения], стр. 88).

Более полная документация многих, не документированных ранее особенностей языка.

Следующие ниже обычные расширения не допускаются стандартом POSIX:

Управляющие последовательности "x не опознаются (см. раздел 4.2 [Управляющие последовательности], стр. 24).

Символы newlines не действуют как whitespace для разделения полей, когда FS равна одному пробелу.

Синоним func для функции keyword не опознается (see раздел 13.1 [синтаксис определения функций], стр. 153).

Операторы `**' и `**=' не могут использоваться вместо `^' и `^=' (см. раздел 7.5 [Арифметические операторы], стр. 82, также см. раздел 7.7 [Присваивающие выражения], стр. 84).

Спецификация `-Ft' в командной строке не устанавливает значение FS равным одному символу tab (см. раздел 5.5 [Спецификации для разделения полей], стр. 44).

Встроенная функция ush не поддерживается (см. раздел 12.4 [Встроенные функции для ввода/вывода], стр. 146).

17.4 Расширения в Bell Laboratories awk

В начало страницы

Brian Kernighan, один из проектировщиков Unix awk, сделал свою версию доступной через анонимный ftp (См. раздел B.8 [Другие свободно доступные реализации awk, стр. 293). В этом разделе описываются расширения его версии awk, которые не входят в POSIX awk.

Параметры командной строки `-mf NNN ' и `-mr NNN ' , предназначенные соответственно для установки максимального количества полей и максимального размера записи (см. раздел 14.1 [Параметры командной строки], сто. 161). Встроенная функция ush для смещения буферизованного вывода (см. раздел 12.4 [Встроенные функции для ввода/вывода], стр. 146).

17.5 Расширения в gawk, не входящие в POSIX awk

В начало страницы

Реализация GNU, gawk, имеет ряд дополнительных особенностей. В этом разделе мы перечислим их в порядке внесения их в gawk. Они все могут быть выключены параметрами либо `--traditional' либо `--posix' (см. раздел 14.1 [Параметры командной строки], стр. 161).

В версии 2.10 gawk введены следующие дополнения:

Переменная окружения AWKPATH для спецификации поиска пути для параметра `-f' командной строки (см. раздел 14.1 [Параметры командной строки], стр. 161).

Переменная IGNORECASE и ее воздействие (см. раздел 4.5 [Чувствительность к регистру в соответствиях], стр. 33). Интерпретация файловых имен `/dev/stdin', `/dev/stdout', `/dev/stderr' и `/dev/fd/n' (см. раздел 6.7 [Специальные имена файлов в gawk], стр. 72).

Версия 2.13 gawk вводит следующие дополнения: Переменная FIELDWIDTHS и ее действия (см. раздел 5.6 [Чтение данных фиксированной ширины], стр. 49).

Встроенные функции systime и strftime для получения и печати отметок времени (см. раздел 12.5 [Функции для действий с отметками времени], стр. 148).

Параметр `-W lint' для выдачи исходного кода, динамических ошибок и проверки переносимости (см. раздел 14.1 [Параметры командной строки], стр. 161).

Параметр `-W compat' для выключения перечисленных расширений (см. раздел 14.1 [Параметры командной строки], стр. 161).

Параметр `-W posix' для полной совместимости с соглашениями POSIX (см. раздел 14.1 [Параметры командной строки], стр. 161).

Версия 2.14 gawk вводит следующие особенности: Оператор next file для перехода к следующему файлу с данными (см. раздел 9.8 [Оператор nextfile], стр. 112).

Версия 2.15 gawk вводит следующие расширения: Переменная ARGIND, которая следит за движением FILENAME сквозь ARGV (см. Главу 10 [Встроенные переменные], стр. 115).

Переменная ERRNO, которая содержит системное сообщение об ошибке, возвращаемое командой \Gamma 1, или когда закрывается файл (см. главу 10 [Встроенные переменные], стр. 115).

Способность использовать параметры стиля GNU с длинными именами, которые начинаются с `--' (см. раздел 14.1 [Параметры командной строки], стр. 161).

Параметр `--source' для смешивания кода из командной строки с библиотечным файлом исходного кода (см. раздел 14.1 [Параметры командной строки], стр. 161).

Интерпретация файловых имен `/dev/pid', `/dev/ppid', `/dev/pgrpid' и `/dev/user' (см. раздел 6.7 [Специальные имена файлов в gawk], стр. 72).

Версия 3.0 gawk вводит следующие расширения: Оператор next file превращается в nextfile (см. раздел 9.8 [Оператор nextfile], стр. 112).

Параметр `--lint-old' для предупреждения о конструкциях, не поддерживаемых оригинальной версией 7 Unix version of awk (см. раздел 17.1 [Главные различия между V7 и SVR3.1], стр. 253).

Параметр `--traditional' был добавлен как лучшее имя для `--compat' (см. раздел 14.1 [Параметры командной строки], стр. 161).

Возможность для FS быть пустой строкой, и для третьего аргумента split быть пустой строкой (см. раздел 5.5.3 [Превращение каждого символа в отдельное поле], стр. 46).

Возможность для RS быть regexp (см. раздел 5.1 [Как ввод делится на записи], стр. 37).

Переменная RT (см. раздел 5.1 [Как ввод разделяется на записи], стр. 37). Функция gensub для расширения действий с текстом (см. раздел 12.3 [Встроенные функции для действий с цепочками], стр. 137).

Функция strftime приобретает формат времени по умолчанию, позволяя вызов без аргументов (см. раздел 12.5 [Функции для действий с отметками времени], стр. 148).

Полная поддержка для POSIX и GNU regexps (см. глава 4 [Регулярные выражения], стр. 23).

Параметр `--re-interval' для обеспечения интервальных выражений в regexps (см. раздел 4.3 [Операторы регулярных выражений], стр. 26).

Изменен IGNORECASE, теперь он применим для сравнения цепочек также как операции regexp (см. раздел Section 4.5 [Чувствительность к регистру при определении соответствия], page 33).

Параметр `-m' и функция ush из Bell Labs research версии awk (см. раздел 14.1 [Параметры командной строки], стр. 161; см. также раздел 12.4 [Встроенные функции для ввода/вывода], стр. 146).

Использование GNU Autoconf для управления конфигурационным процессом (см. раздел B.2.1 [Компиляция gawk для Unix], стр. 284). Поддержка Amiga (см. раздел B.6 [Установка gawk на Amiga], стр. 291).

В начало страницы

<<< Оглавление Страница: 17  Приложение A. >>>