The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Увидел свет GNU Awk 4.0.0

02.07.2011 21:43

После двух лет разработки и спустя десять лет после формирования прошлой стабильной ветки 3.1 представлен новый значительный релиз реализации языка программирования AWK от проекта GNU - Gawk 4.0.0. Язык был разработан в 70-х годах прошлого века и не претерпел значительных изменений с середины 80-х годов, в которых был определен основной костяк AWK, что позволило на протяжении последних десятилетий сохранить первозданную стабильность и простоту языка. Несмотря на преклонный возраст, AWK до сих пор активно используется администраторами для выполнения рутинных работ, связанных с парсингом различного рода текстовых файлов и генерации несложной результирующей статистики.

В новой версии устранены некоторое слабые стороны Gawk и отражены современные реалии. Из добавленных улучшений можно отметить:

  • Переработана внутренняя архитектура, проведена чистка кода и изменен метод генерации байткода, что в сумме, возможно, положительно сказалось на производительности;
  • Отладчик dgawk, напоминающий GDB;
  • Возможность включения кода из внешних файлов;
  • Поддержка косвенного вызова функций, что позволяет привязать функцию-обработчик к определенному строковому значению, т.е. избежать череды проверок if-else за счет использования конструкций вида "result = @the_func()", где "the_func" переменная, в которой содержится имя вызываемой функции;
  • Реализация шаблонов BEGINFILE и ENDFILE, позволяющих выполнить код перед открытием и после завершения обработки очередного файла (имя файла передается через переменную FILENAME). Используя BEGINFILE, например, можно проверить права доступа к файлу или предпринять какие-то действия перед началом парсинга;
  • Поддержка IPv6 через специальный файл /inet6/...;;
  • Возможность создания вложенных массивов, в которых элементом массива может выступать другой массив;
  • Реализация режима изолированного выполнения (опция --sandbox), при котором запрещено выполнение функции system(), перенаправление ввода и вывода, динамическая загрузка расширений. Опцию можно применять в случае, когда нужно запустить скрипт, полученный из сомнительных источников;
  • Включение по умолчанию switch/case (раньше нужно было собирать gawk с указанием специальной опции в configure);
  • Удалена поддержка устаревших платформ, среди которых Atari, Amiga, BeOS, Cray, MIPS RiscOS, MS-DOS и Windows c использованием компилятора от Microsoft, NeXT, SunOS 3.x;
  • В регулярных выражениях добавлена поддержка указания интервалов и возможность использования масок "\s" и "\S";
  • Добавлена новая переменная FPAT, позволяющая задать определяющее поля регулярное выражение, вместо использования разделителя полей. Добавлена новая функция patsplit(), которая позиционируется как аналог split() с реализацией данной функциональности;
  • В функции split() добавлена поддержка четвертого опционального аргумента с массивом для сохранения разделителей;
  • Новая опция "--characters-as-bytes" ("-b") для принудительной интерпретации входных данных как строк из однобайтовых символов;
  • Директивы "break" и "continue" отныне нельзя использовать вне циклов, за исключением вызова скрипта с опцией "--traditional";
  • Добавлена функция isarray() для проверки, является ли аргумент массивом (упрощает реализацию перебора вложенных массивов);
  • В функции asort() и asorti() добавлена поддержка третьего аргумента, задающего метод сортировки.


  1. Главная ссылка к новости (http://lists.gnu.org/archive/h...)
  2. OpenNews: Интервью с одним из трех авторов языка программирования AWK
  3. The GNU Awk User's Guide
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/31067-Awk
Ключевые слова: Awk
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (31) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, анонимный аноним (?), 22:00, 02/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > "Microsoft Compiler"

    wtf?

     
     
  • 2.2, Аноним (-), 22:36, 02/07/2011 [^] [^^] [^^^] [ответить]  
  • –4 +/
    который в Visual Studio?
     
     
  • 3.16, Аноно (?), 13:05, 04/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Читай по ссылке, имеется ввиду Microsoft-версия GCC.
     
     
  • 4.17, dq0s4y71 (??), 16:29, 04/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ты сам-то читал? Имеется ввиду сборка под МС-ДОС. Там, наверное, какой-нибудь древнючий Quick C был.
     
     
  • 5.18, Аноно (?), 17:25, 04/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В МС-ДОС нет поддержки IPv6,какой тогда ещё Quick C?
     
     
  • 6.20, dq0s4y71 (??), 19:04, 04/07/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Выпилина поддержка 16-битного МС-ДОС компилятора Microsoft C 7. А с тем, что в МС-ДОС нет поддержки IPv6, никто не спорит.
     

  • 1.3, Аноним (-), 22:40, 02/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Поддержка IPv6;

    Ничего так язык программирования :)

     
  • 1.4, sdog (ok), 00:57, 03/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Поддержка IPv6;
    ???
     
     
  • 2.6, pkunk (ok), 01:29, 03/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    http://www.opennet.me/openforum/vsluhforumID3/74306.html#16
     

  • 1.5, Vitold S (?), 01:00, 03/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Ну осталось теперь дождаться портов для Apache и nginx и в принципе чем не язык...
     
     
  • 2.7, rur (?), 11:10, 03/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    AWK - отличная штука!
    Добавили бы еще нормальную функциональность с бинарными файлами,
    цены бы не было.


     
     
  • 3.14, northbear (ok), 06:33, 04/07/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Идея из серии: Если бы подводную лодку научить летать, цены бы ей не было...

    awk - это классическая Unix-tools, которая делает что-то одно. но делает это очень хорошо. Не нужно ему бинарных файлов. И IPv6 ему совсем ни к чему. И вообще что это такое поддержка ipv6?

     
     
  • 4.19, rur (?), 17:25, 04/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Про подводную лодку: не в тему. ПЛ научить летать сложно. А добавить анализ бинарных файлов НЕ ТАК СЛОЖНО. Вот сейчас появился костыль: "Новая опция "--characters-as-bytes" ("-b")..." -- но это лишь костыль. А сделать надо удобнее.

    "...которая делает что-то одно..." -- Ну, да... А что это, что-то одно?
    Если анализ буквенных строк -- то слишком узко. Хотелось бы, чтобы это было просто
    *анализ строк*, там, где и нон-аски байты можно обрабатывать аналогично аски-байтам.

    А IPv6 действительно ни к чему.

     
     
  • 5.22, PereresusNeVlezaetBuggy (ok), 02:42, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вот он, источник монстроидальных программ нашего времени, которые отпугивают сво... большой текст свёрнут, показать
     
     
  • 6.23, rur (?), 09:49, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> Если анализ буквенных строк -- то слишком узко. Хотелось бы, чтобы это
    >> было просто
    >> *анализ строк*, там, где и нон-аски байты можно обрабатывать аналогично аски-байтам.
    > Их и сейчас можно обрабатывать. Выставляйте свои FS, RS и т.д. Если
    > вам это не подходит, то вы просто не по адресу, ибо
    > это означает, что у вас не строковые данные.

    --- Скажите мне, что такое "строковые данные" ? -- это не придирка, а суть.
    Лет сто назад ;) это считалось ASCII-с-CR-в-конце. У вас также?

    --- Чтобы не ударяться в философию, рассмотрим пример, где AWK мог бы применяться, но сейчас это сделать сложно: файл *.gif начинается с букв "GIF", а потом идет инфо о картинке: размер, цвет и др. - бинарная. Это - заголовок файла. Почти "строковые данные".
    Таких примеров много.

     
     
  • 7.26, PereresusNeVlezaetBuggy (ok), 10:43, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >>> Если анализ буквенных строк -- то слишком узко. Хотелось бы, чтобы это
    >>> было просто
    >>> *анализ строк*, там, где и нон-аски байты можно обрабатывать аналогично аски-байтам.
    >> Их и сейчас можно обрабатывать. Выставляйте свои FS, RS и т.д. Если
    >> вам это не подходит, то вы просто не по адресу, ибо
    >> это означает, что у вас не строковые данные.
    > --- Скажите мне, что такое "строковые данные" ? -- это не придирка,
    > а суть.
    > Лет сто назад ;) это считалось ASCII-с-CR-в-конце. У вас также?

    Это в Си так считалось. Есть и другие, не менее древние языки. ;) Строка — одномерный набор последовательно расположенных однотипных элементов с заранее неизвестным их количеством. Количество элементов в строке может определяться либо отдельной сущностью (как строки в Pascal, например), либо терминатором (C), либо вообще и так, и сяк (Visual Basic). awk работает со строками с терминаторами.

    > --- Чтобы не ударяться в философию, рассмотрим пример, где AWK мог бы
    > применяться, но сейчас это сделать сложно: файл *.gif начинается с букв
    > "GIF", а потом идет инфо о картинке: размер, цвет и др.
    > - бинарная. Это - заголовок файла. Почти "строковые данные".
    > Таких примеров много.

    Не путайте «текстовые данные» и «строковые данные». В данном случае мы имеем упакованную структуру, а не набор строк. awk для обработки таких данных не предназначен. Вам надо что-то вроде pack/unpack() из Perl. Используйте подходящий инструмент, не надо плоскогубцами шурупы закручивать. :)

     
  • 7.29, all_glory_to_the_hypnotoad (ok), 11:08, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Лет сто назад ;) это считалось ASCII-с-CR-в-конце. У вас также?

    LF в православных ОС и CR + LF в протестантских.

    > Чтобы не ударяться в философию, рассмотрим пример, где AWK мог бы применяться, но сейчас это сделать сложно: файл *.gif начинается с букв "GIF", а потом идет инфо о картинке: размер, цвет и др. - бинарная. Это - заголовок файла. Почти "строковые данные".

    это совсем _не_ строковые данные. Чтобы парсить такие "строки" нужны совершенно другие инструменты и awk под это нормально не переделать. Может быть даже уже есть такие готовые инструменты, но они никогда не были так популярны как различного рода _строковые_ потоковые редакторы.

     
     
  • 8.32, gegMOPO4 (ok), 11:23, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще-то, CRLF для обозначения конца строки старше LF Это в Unix и Apple решил... текст свёрнут, показать
     
     
  • 9.35, Антоним (?), 20:02, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ну хорошо, пусть будет CRLF в старообрядных ОС Да, так даже лучше подходит для ... текст свёрнут, показать
     
  • 8.36, Белая рысь (?), 19:25, 08/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это у вас-то с вашими демонами и зомби православная система Богохульцы ... текст свёрнут, показать
     
  • 6.25, all_glory_to_the_hypnotoad (ok), 10:07, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    amanda должна вам понравится. Хотя для ваших задач вообще не нужна система такого типа, подойдёт что-то проще типа backuppc
     
     
  • 7.27, PereresusNeVlezaetBuggy (ok), 10:45, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > amanda должна вам понравится. Хотя для ваших задач вообще не нужна система
    > такого типа, подойдёт что-то проще типа backuppc

    Про Аманду знаю, она уже на очереди; backuppc ещё не рассматривал, спасибо. :) Обзор что ли подготовить. :))) Если руки дойдут, конечно, а не как обычно...

     
  • 5.24, all_glory_to_the_hypnotoad (ok), 10:05, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    в (g)awk  нет ни одного инструмента для работы с бинарными данными. И его архитектура не позволяет это сделать не через задницу.

    > Вот сейчас появился костыль: "Новая опция "--characters-as-bytes" ("-b")..." -- но это лишь костыль. А сделать надо удобнее.

    это только для устранения влияния локали на парсинг строк, т.е. ещё один костыль для утилиты которая не знает что такое различные кодировки.

     
     
  • 6.28, rur (?), 10:49, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > в (g)awk  нет ни одного инструмента для работы с бинарными данными.
    > И его архитектура не позволяет это сделать не через задницу.

    --- Именно об этом речь!
    Есть масса примеров, где в строках и буквы и не-буквы. Если заточить
    под это АВК - цены ему не будет, ибо он в сто раз проще перла, но практически
    такой же по возможностям.

     
     
  • 7.33, gegMOPO4 (ok), 11:26, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Есть масса примеров, где в строках и буквы и не-буквы. Если заточить
    > под это АВК - цены ему не будет,

    У меня awk прекрасно парсит логи, содержащие не-буквы (ANSI-последовательности для цветов). Я что-то делаю не так?

     
     
  • 8.34, Andrey Mitrofanov (?), 12:42, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Один байт ESC в тексе читать парсить писать не мудрено, а вот uint32 какой-ниб... текст свёрнут, показать
     
  • 5.31, gegMOPO4 (ok), 11:18, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот сейчас появился костыль: "Новая
    > опция "--characters-as-bytes" ("-b")..." -- но это лишь костыль. А сделать надо
    > удобнее.

    Эта опция на самом деле не нужна. LANG=C — и вперёд.

    > Если анализ буквенных строк -- то слишком узко. Хотелось бы, чтобы это
    > было просто
    > *анализ строк*, там, где и нон-аски байты можно обрабатывать аналогично аски-байтам.

    А сейчас что мешает?

     
  • 3.30, gegMOPO4 (ok), 11:15, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Для бинарных данных есть Sawzall (http://www.opennet.me/opennews/art.shtml?num=28590).
     

  • 1.8, all_glory_to_the_hypnotoad (ok), 12:17, 03/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Отладчик dgawk, напоминающий в процессе работы на GDB;

    какой-то фетиш нездоровый пошёл

     
  • 1.15, terr0rist (ok), 12:27, 04/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Осталось только mod_gawk для апача, ООП, lib_stdgawk++ - и вперёд, заменим гавком С, Жаву, Перл, Винни-Пуха и всех-всех-всех.
     
  • 1.21, vle (ok), 21:16, 04/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если кому интересно, гляньте сюда

    http://sourceforge.net/projects/runawk

    Система модулей для awk-а (портабельная, для всех awk-ов)
    плюс ~50 модулей-полезняшек,
    включая волшебный обработчик опций power_getopt.awk.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру