руководство пользователя для 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). |
<<< | оглавление | >>> |