LINUX.ORG.RU

GNU awk 4.0.0

 , ,


0

1

Аарон Роббинс (Aharon Robbins) сообщил в рассылке о радостном событии — выходе версии 4.0.0 GNU Awk.

При переходе от версии 3.1.8 к 4.0.0 произошел ряд изменений, в том числе и изменения в поведении программы:

  • Изменения в поведении gawk
    • Для `sub' и `gsub' по умолчанию используется поведение согласно стандарту POSIX 2008
    • В соответствии с GNU Coding Standards динамические расширения (плагины) должны теперь определять глобальную переменную plugin_is_GPL_compatible для указания совместимости этих расширений с лицензией GNU GPL
    • В режиме POSIX-совместимости для сравнения строк используется strcoll/wcscoll
    • Диапазоны вида [d-h] теперь обрабатываются так, как в локали C, независимо от типа используемого регулярного выражения, даже при указании --posix. Последняя версия стандарта POSIX разрешает такое поведение. Это изменение должно пресечь замеченное в старых версиях gawk ветки 3.* поведение, когда в некоторых локалях диапазон [a-z] включал в себя символы в верхнем регистре, подробнее этот вопрос рассмотрен в этой теме рассылки, тем не менее рекомендация использовать [[:lower:]] и [[:upper:]] для таких целей всё ещё актуальна
  • Больше не используются специальные файлы /dev/pid, /dev/ppid, /dev/pgrpid, /dev/user. Вместо них рекомендуется пользоваться PROCINFO
  • Пробельные (\s) и отличные от пробельных (\S) управляющие последовательности распознаются в регулярных выражениях
  • Функция split() принимает четвёртый необязательный аргумент: массив, содержащий значения символов-разделителей
  • Новая опция -b / --characters-as-bytes отключает интерпретацию входных данных как многобайтовых символов
  • Новая опция --sandbox
  • Доступны косвенные вызовы функций
  • Количественные модификаторы или квантификаторы (Interval expressions) теперь входят в перечень стандартных регулярных выражений синтаксиса gawk
  • Опция --gen-po получила более корректное наименование --gen-pot
  • switch / case включены по умолчанию, отпала необходимость включать их на этапе конфигурации
  • Добавлена поддержка BEGINFILE и ENDFILE
  • Передача в командную строку gawk вместо имени текстового файла имени каталога, теперь генерирует предупреждение, а не фатальную ошибку [1], если не указана --posix или --traditional, с этими опциями генерируется фатальная ошибка
  • Новая переменная FPAT позволяет указать регулярное выражение для поля, а не для разделителя полей. Новая функция patsplit() даёт такую же возможность для разделения строк
  • Все длинные опции получили короткие аналоги для использования в `#!' скриптах
  • Добавлена поддержка IPv6 через специальный файл /inet6/... ; /inet4/... форсирует использование IPv4, а /inet позволяет считать значение по умолчанию в системе (чаще всего IPv4)
  • Добавлено предупреждение при использовании /[:space:]/ вместо рекомендуемого /[[:space:]]/
  • В основную ветку внесена реализация байт-кодового gawk авторства Джона Хака (John Haque). Добавлен отладчик dgawk, возможно повышение производительности
  • `break' и `continue' недействительны вне цикла, даже при указании --traditional
  • Классы символов POSIX работают с --traditional (BWK awk также поддерживает их)
  • Опции --compat, --copyleft, --usage были удалены по причине их избыточности
  • Добавлены массивы массивов (многомерные массивы)
  • Удалена опция для raw сокетов, поскольку так и не была реализована
  • PROCINFO[«strftime»] теперь содержит формат по умолчанию для strftime()
  • При разработке новой версии использованы Autoconf 2.68, Automake 1.11.1, Gettext 0.18.1, Bison 2.5
  • Выполнена чистка кода, в том числе удалён код для старых, неподдерживаемых систем (Atari, Amiga, BeOS, Cray, MIPS RiscOS, MS-DOS с Microsoft Compiler, MS-Windows с Microsoft Compiler, NeXT, SunOS 3.x, Sun 386 (Road Runner), Tandem (non-POSIX), Prestandard VAX C compiler for VAX/VMS и др.)
  • Если PROCINFO[«sorted_in»] определён, циклы, выполняющие обработку элементов массива по так называемой конструкции «for(iggy in foo)» сортируют индексы прежде чем приступить к проходу по циклу. Значение этого элемента позволяет осуществлять контроль за тем, как индексы будут отсортированы перед началом обхода цикла
  • Новая фукнция isarray() проверяющая, является ли элемент массивом, делает возможной обработку многомерных массивов
  • Функции asort() и asorti() принимают третий аргумент для указания способа сортировки

Исходные коды

>>> Подробности

★★★★★

Проверено: maxcom ()
Последнее исправление: post-factum (всего исправлений: 4)

Ответ на: комментарий от anarquista

Пакет iproute2, в частности, также содержит подробное описание, что и как какая команда выводит.

anarquista ★★★★★
() автор топика
Ответ на: комментарий от anarquista

>Все стандартные команды POSIX, как минимум, имеют формально описанный синтаксис.

Покажите описание синтаксиса вывода POSIX команды ps, например.

Да, то, что в какой-то документации что-то не описано, это лишь частный случай, а не правильно.

Это - норма для прикладных программ.

anonymous
()
Ответ на: комментарий от anarquista

Ткните пальцем на _формально_ описанный синтаксис. Пока я вижу всякие «On some implementations, especially multi-level secure systems, ps may be severely restricted and produce information only about child processes owned by the user.», «The contents of the COMMAND field need not be the same in all implementations, due to possible truncation.», «Only comm and args shall be allowed to contain <blank> characters; all others shall not.» и прочие.

anonymous
()
Ответ на: комментарий от anonymous

>>не надо доводить идею до абсурда

А какая идея-то?

разговор шел о unix way. и не надо делать вид, что я сказал то, что вы только что так лихо «опровергли».

anonymous
()
Ответ на: комментарий от anonymous

The -o option allows the output format to be specified under user control.

The application shall ensure that the format specification is a list of names presented as a single argument, <blank> or <comma>-separated. Each variable has a default header. The default header can be overridden by appending an <equals-sign> and the new text of the header. The rest of the characters in the argument shall be used as the header text. The fields specified shall be written in the order specified on the command line, and should be arranged in columns in the output. The field widths shall be selected by the system to be at least as wide as the header text (default or overridden value). If the header text is null, such as -o user=, the field width shall be at least as wide as the default header text. If all header text fields are null, no header line shall be written.

Да, написано по-английски, а не на одном из языков описания грамматики. Однако это не перестаёт быть формаьным описанием.

anarquista ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>разговор шел о unix way

Ну и какая у него идея в плане объединения программ?

anonymous
()
Ответ на: комментарий от anarquista

>Да, написано по-английски, а не на одном из языков описания грамматики. Однако это не перестаёт быть формаьным описанием.

Ок, какие значения могут быть, к примеру, у поля TTY?

anonymous
()
Ответ на: комментарий от anonymous

Формат tty неопределен. Гарантируется, что ps, who, write и talk использует один и тот же формат. Разве этого недотаточно?

Переносимости между машинами тут же не требуется.

Кстати, могу предложить услугу: «чтение man'ов вслух».

anarquista ★★★★★
() автор топика
Ответ на: комментарий от dilmah

Кстати, в пакет gawk входит файл strtonum.awk, содержащий функцию mtstrtonum, котороая умеет и шестанадцатиричные системы.

anarquista ★★★★★
() автор топика
Ответ на: комментарий от anarquista

>Да, известно только, что это имя файла.

Так, ещё раз: мне показали якобы формальное описание синтаксиса вывода ps, в котором, как минимум, одно поле неизвестного формата. Всё верно? То есть, неизвестный формат поля - это ещё формальный синтаксис? Кстати, а значение "?" какому имени файла соответствует?

anonymous
()
Ответ на: комментарий от anonymous

по крайней мере, известно, указано явно, что это строка без пробелов, что еще нужно для парсинга?

да, про вопрос я не знаю, где написано, что это значит…

anarquista ★★★★★
() автор топика
Ответ на: комментарий от Nastishka

cut далеко не всегда можно использовать даже в простых случаях.

Разделитель полей для cut это всегда один символ, однако, частно это не один, символ, а несколько. Тот же ps добавляет пробелы, чтобы выводить данные аккуратно в столбик.

anarquista ★★★★★
() автор топика
Ответ на: комментарий от anarquista

>что еще нужно для парсинга?

Как это ни странно, смысл (то бишь, по сути тип) данных. Чтобы в другую программу знать что отправлять.

по крайней мере, известно, указано явно, что это строка без пробелов

А если имя файла содержит пробелы?

anonymous
()
Ответ на: комментарий от anonymous

Вообще-то, есть определенные договоренности относительно именования терминалов, без пробелов и без знака вопроса.

В /usr/src/linux-*/Documentaion/devices.txt описаны соглашения на этот счет.

anarquista ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> Также не понял почему мажорная версия, а не 3.2

Да это просто сейчас такой вирус среди разработчиков бушует, скоро всё должно прийти в норму.

anonymous
()
Ответ на: комментарий от anonymous

Не знаю.

Если вы напишете свою ОС с нескучными обоями и пробельными именами терминалов, ps, возможно, придется сильно переделывать…

anarquista ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Вообще, да. Довольно забавно.

Пробовал переименовывть tty4 по-всякому. Пробелы и вопросительные знаки в имени терминала просто заменяет знаком ?.

anarquista ★★★★★
() автор топика
Ответ на: комментарий от dilmah

А еще в gawk есть опция специальная опция:

If you run `gawk' with the `--non-decimal-data' option, you can have nondecimal constants in your input data

anarquista ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.