Руководство пользователя для GNU Awk
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 awkBrian 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. | >>> |