The OpenNET Project / Index page

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

Новая версия языка программирования GNU Awk 4.2.0

20.10.2017 08:36

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

Ключевые изменения:

  • При запуске не в режиме POSIX переменные в ENVIRON теперь отражаются в окружение gawk и дочерних программ, запущенных через вызов system();
  • Увеличено качество псевдослучайных чисел, выдаваемых функцией rand(). Порядок чисел в последовательности по-прежнему повторяем, поэтому rand() не подходит для криптографических нужд;
  • Улучшена работа режима вывода отформатированного кода программы. При указании опции "--pretty-print" AWK-программа теперь не запускается;
  • Добавлена возможность сборки с использованием CMake, который теперь позиционируется в качестве альтернативного сборочного инструментария;
  • Добавлена настройка PROCINFO["NONFATAL"] при которой ошибки ввода/вывода не приводят к завершению выполнения. По аналогии PROCINFO["redirection", "NONFATAL"] действует для перенаправленных потоков;
  • Добавлена опция PROCINFO[input-file, "RETRY"], при установке которой в случае ошибки ввода/вывода предпринимается повторная попытка выполнения операции;
  • Нарушена бинарная совместимость для C API, Си-приложения связанные с gawk требуют пересборки;
  • Добавлена поддержка строго типизированных констант с регулярными выражениями, задаваемых в виде "@/.../". Такие константы можно присвоить переменным и использовать справа от операторов "~" и "!~", а также в составе выражений "case";
  • Добавлена функция typeof() для определения типа переменной (array, regexp, string, number);
  • Прекращена поддержка старого механизма подключения расширений, основанного на применении функции "extension";
  • Прекращена поддержка платформы GNU/Linux на системах Alpha;
  • Прекращена поддержка операционной системы MirBSD;
  • Возвращён в строй порт для DJGPP, для которого нашёлся сопровождающий;
  • Включена по умолчанию оптимизация кода выполняемых приложений, для отключения которой следует использовать опцию "-s/--no-optimize';
  • При наличии задействован механизм fwrite_unlocked, позволяющий на 7% - 18% поднять скорость вывода gawk '{ print }' для больших файлов;
  • Ускорены операции в режиме IGNORECASE;
  • Использование отрицательных значений в битовых функциях теперь приводит к завершению работы с ошибкой;
  • В mktime добавлен второй аргумент для включения преобразования времени в UTC вместо локального часового пояса;
  • Добавлен массив PROCINFO["argv"], в котором сохраняются все аргументы командной строки.


  1. Главная ссылка к новости (https://www.mail-archive.com/i...)
  2. OpenNews: Новая версия языка программирования GNU Awk 4.1.0
  3. OpenNews: Увидел свет GNU Awk 4.0.0
  4. OpenNews: Redis-клиент на awk
  5. OpenNews: Интервью с одним из трех авторов языка программирования AWK
  6. OpenNews: Новая программа: Awka - транслятор с AWK в ANSI C
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/47420-awk
Ключевые слова: awk
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (56) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, blzz (?), 08:54, 20/10/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    >> Улучшена работа режима вывода отформатированного кода программы. При указании опции "--pretty-print" AWK-программа теперь не запускается;

    улучшено на отличненько

     
     
  • 2.2, Аноним (-), 08:59, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Да, раньше было более чем странно, когда запуск фильтра для форматирования кода приводил к выполнению этого кода.
     
  • 2.38, Zarat (ok), 10:39, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Сам удивился, но как всегда корявый перевод из
    https://www.mail-archive.com/info-gnu@gnu.org/msg02352.html

    The --pretty-print option no longer runs the program too.

    Даже дословный был-бы лучше.
    т.е. понимать:
    - AWK-программа теперь не запускается;
    + теперь AWK-код не будет интерпретироваться (выполняться)

     

  • 1.3, Аноним (-), 09:05, 20/10/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Недоперл?
     
     
  • 2.4, bentall (ok), 09:14, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +12 +/
    Прямой предок же. А так, когда нужно сделать что-то простое и достаточно-одноразовое с текстом — самое то.
     
     
  • 3.5, Anonymus (?), 09:39, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А sed не проще, разве?
     
     
  • 4.7, Аноним (-), 10:06, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    sed не годится, когда нужно что-нибудь посчитать, например. Но на perl такие вещи делаются, как правило, проще. awk может потребоваться для максимальной переносимости, благо он POSIX, но тогда все плюшки gawk идут лесом.
     
  • 4.8, angra (ok), 10:09, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +7 +/
    По личному опыту, включающему в себя чтение скриптов и однострочников коллег, в подавляющем большинстве случаев awk используется для вытаскивания из потока нужных позиций(колонок), а sed для регексовой замены как в потоке так и напрямую в файлах. То есть они используются для разного и выбора как такового нет. При этом конечно можно каждым из них решить основную задачу другого, но неудобно.
     
     
  • 5.20, Аноним (-), 13:26, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > в подавляющем большинстве случаев awk используется для вытаскивания из потока нужных позиций(колонок)

    ...неосиляторами cut(1).

     
     
  • 6.22, angra (ok), 13:50, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем осиливать значительно более убогий инструмент, который к тому же не способен справится с основной задачей во многих случаях? Я пробовал его использовать лет десять назад, довольно быстро пришел к выводу, что вместо экономии времени получил прямо противоположный результат.
     
     
  • 7.27, Аноним (-), 14:42, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Было бы, что там осиливать, я б ещё понял вопрос зачем code time sh -c ... большой текст свёрнут, показать
     
     
  • 8.29, Andrey Mitrofanov (?), 17:26, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вспоминание отдельного второго языка для того же самого истратит гораздо больше ... текст свёрнут, показать
     
     
  • 9.30, Аноним (-), 17:41, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ты упоролся Какого ещё языка Одна команду с парой опций 8212 это у тебя язы... текст свёрнут, показать
     
     
  • 10.36, angra (ok), 05:11, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну не языка, а синтаксиса команды Принципиальной разницы нет, по существу Андре... текст свёрнут, показать
     
     
  • 11.40, Аноним (-), 13:44, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ты когда последний раз видел человека, который хорошо знает awk Большинство кро... текст свёрнут, показать
     
     
  • 12.43, . (?), 18:14, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Его не только в контейнерах нет - его нигде нет Самому приносить надо А awk -... текст свёрнут, показать
     
  • 12.45, angra (ok), 23:33, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Поднимись выше по треду и прочитай, что я сказал про основное использование awk ... текст свёрнут, показать
     
  • 10.39, Zarat (ok), 10:44, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    DSL cut-a ... текст свёрнут, показать
     
  • 8.34, angra (ok), 04:56, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Про ниасиляторов не я говорил Я сказал о ненужности cut и его неспособности р... текст свёрнут, показать
     
     
  • 9.41, Аноним (-), 13:54, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Я прекрасно знаю про задачи , которые cut не может решить А также знаю, что в ... текст свёрнут, показать
     
     
  • 10.44, . (?), 18:50, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Му-ха-ха Какой восторженный - Ну погнали по пунктам Нет, не знаешь ... текст свёрнут, показать
     
     
  • 11.46, Аноним (-), 23:56, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Для меня таких причин нет Ты, видимо, зачем-то пытаешься разбирать табличный ... текст свёрнут, показать
     
     
  • 12.47, Nolan (?), 02:29, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    cut слишком беден, что-то аналогичного обычному awk 4 sda print 3 102... текст свёрнут, показать
     
     
  • 13.48, Led (ok), 03:00, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    expr grep -o digit sda proc partitions 124 cut -d -f1 1024... текст свёрнут, показать
     
     
  • 14.51, Noland (?), 11:49, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Это подтверждает мои слова - cut слишком беден, чтобы решить туже задачу требует... текст свёрнут, показать
     
  • 13.50, Аноним (-), 11:41, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вот о чём я и говорил Все эти пляски с awk 8212 от неумения решать задачи по... текст свёрнут, показать
     
     
  • 14.52, Noland (?), 11:57, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Таже проблема, что и у предыдущего решения - порождение лишних процессов и отсут... текст свёрнут, показать
     
     
  • 15.54, Аноним (-), 12:23, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Тебе процессов жалко PID ы исчерпать боишься, что ли Тогда неправильно считаеш... текст свёрнут, показать
     
     
  • 16.56, Noland (?), 14:20, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Считаю я правильно, а именно сколько процессов порождалось оболочкой, ещё точнее... текст свёрнут, показать
     
     
  • 17.58, Аноним (-), 15:38, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Нет, речь шла о замене awk print N на cut Твой пример с awk отличается, ... большой текст свёрнут, показать
     
     
  • 18.60, Noland (?), 18:35, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Спору нет, cut удобнее и эффективнее, если речь идёт только о выводе полей при у... текст свёрнут, показать
     
  • 14.53, Noland (?), 12:12, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Если было бы предложено read size sys block sda size echo size 2048 ... текст свёрнут, показать
     
     
  • 15.55, Аноним (-), 12:27, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Да Но при этом менее читаемо хотя всё равно лучше, чем на awk ... текст свёрнут, показать
     
     
  • 16.57, Noland (?), 14:27, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вопрос читаемости в данном случае очень спорный, а прирост производительности, х... текст свёрнут, показать
     
     
  • 17.59, Аноним (-), 15:42, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Спорный или нет, я ориентировался прежде всего на наилучшую читаемость Мы ж тут... текст свёрнут, показать
     
  • 7.28, iCat (ok), 15:39, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >А зачем осиливать значительно более убогий инструмент...

    Ты картинки смотришь Photoshop, а кинофильмы - AdobePremier?

     
     
  • 8.35, angra (ok), 05:03, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ты не понимаешь разницу между просмотром и редактированием Нет, я не редактирую... текст свёрнут, показать
     
  • 6.33, Аноним (-), 01:51, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Сразу видно что cut ты сам ни разу не использовал, иначе ты бы знал почему awk проще cut
     
  • 6.37, Поликарпыч (?), 10:12, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ты и с блокнотиком и Карела шиком логи проверяй.. Это для настоящих спецов.
     
  • 4.10, Andrey Mitrofanov (?), 11:09, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А sed не проще, разве?

    Разговор не про "проще" [или даже раньше], а про оказал влияние на создателя нового языка. Лари писал, что awk участвовал при зачатии.

    [CODE]It combines (in  the  author's  opinion,  anyway)
    some  of the best features of C, sed, awk, and sh,[/CODE]

    И да, sed проще --> в смысле примитивнее и ограниченнее.

    Обычно я ранжирую [строко-ориентированные под-]языки, используемые _в shell_, как cat <= grep <= sed <= awk. А перла я В) не осилил.

     
     
  • 5.17, VINRARUS (ok), 13:12, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну sed быстрее чем awk, а в последнем релизе даже перегнал сам себя в 80 раз.
    http://forum.motofan.ru/index.php?s=&showtopic=162200&view=findpost&p=1783969

    Проблема в том шо некоторым недопрограмистам очень сложно освоить ключ -е, от чего они пишут несколько sed в конвеере.

     
     
  • 6.21, Аноним (-), 13:31, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Проблема в том шо некоторым недопрограмистам очень сложно освоить ключ -е, от
    > чего они пишут несколько sed в конвеере.

    А что, они и ";" не осилили?

     
     
  • 7.25, Аноним (-), 14:26, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Хотя на самом деле большинство в sed не осиливает ничего кроме s///. В результате городят жуткие конвейеры из cat|grep|head|tail|sed.
     
  • 6.24, Andrey Mitrofanov (?), 14:25, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ну sed быстрее чем awk, а в последнем релизе даже перегнал сам
    > себя в 80 раз.
    > http://forum.motofan.ru/index.php?s=&showtopic=162200&view=findpost&p=1783969
    > Проблема в том шо некоторым недопрограмистам очень сложно освоить ключ -е, от
    > чего они пишут несколько sed в конвеере.

    Бывают попромисты, не могущие в ';' ??  Ну, питонисты должны...[--8<--][CODE]PG_OPTS=$(2>/dev/null <"${0%/*}/.plugins.conf" sed -n 's/^ *psql_opts *= *//;T;p;q')[/CODE]

     
  • 3.6, еарапр (?), 09:49, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, как бы, лисп же лучше.
     

  • 1.9, Аноним (-), 10:22, 20/10/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Прекращена поддержка платформы GNU/Linux на системах Alpha;

    Но... Оно же на Си...

     
     
  • 2.11, Iaaa (ok), 11:42, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Скорее не нашли где потестить, и забили.
     
  • 2.13, alex (??), 11:49, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    скорее всего просто не на чем тестить
    а собрать самому из исходников никто не запрещает
     
     
  • 3.15, pripolz (?), 12:08, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > скорее всего просто не на чем тестить

    а qemu-system-alpha...

     
     
  • 4.23, Аноним (-), 14:24, 20/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > qemu-system-alpha

    Зачем так сложно, если есть qemu-alpha?
    Скорее это просто оказалось никому не надо.

     

  • 1.12, _bob (ok), 11:44, 20/10/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    http://www.newlisp.org/ -- довольно неплох.
     
  • 1.32, freehck (ok), 23:50, 20/10/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > Нарушена бинарная совместимость для C API, Си-приложения связанные с gawk требуют пересборки;

    Простите, может быть я наивен, но что надо сделать с библиотекой, чтобы сломать двоичную совместимость?

    Какие-нибудь функции удалили, что ли? Так если они не используются, то вроде бы не потребуется пересборки... Вот не понял.

     
     
  • 2.42, Аноним (-), 14:01, 21/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Простите, может быть я наивен, но что надо сделать с библиотекой, чтобы
    > сломать двоичную совместимость?

    Например заменить какую-нибудь функцию макросом (или inline-функцией).

    > Какие-нибудь функции удалили, что ли? Так если они не используются, то вроде бы не потребуется пересборки...

    А если используются?

     
  • 2.49, angra (ok), 11:20, 22/10/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Если удалить функции, то изменится еще и API. Наверное самый простой способ поломать ABI без API это изменить что-либо из экспортируемых типов или структур.
     
     
  • 3.63, freehck (ok), 11:52, 24/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Наверное самый простой способ поломать ABI без API это изменить
    > что-либо из экспортируемых типов или структур.

    Спасибо за исчерпывающий ответ!

     

  • 1.62, vantoo (ok), 13:39, 23/10/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В свое время перечитал от корки до корки "Gawk: Effective AWK Programming" и не пожалел. Использую его где только это может пригодится.
     

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



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

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