← All posts tagged gawk

Вот интересно, в стабильную версию системы Debian GNU/Linux (которая позиционируется как свободная и действительно стабильная) входит GNU awk 3.1.7…

В версии 3.1.8 обнаружена серьёзная ошибка (segmentation fault), возможно, она есть и в 3.1.7. Так главный разработчик GNU awk, еврей Аарон Роббинс, заявляет, что про третью ветку он давно забыл и ошибки исправлять не будет, если только его специально не попросить.
То есть, стабильная ветка Debian содержит никем не поддерживаемые программы, на ошибки в которых всем чихать!

По-видимому, нельзя называть ветку “stable”, пока в ней есть хотя бы один GNU-пакет или другое подобное еврейское говнецо. Debian GNU-unstable /Linux, как-то так.

В четвертой версии GNU AWK функции sub были приведены в соответствие со стандартом POSIX 2008.
Неделю назад пришел баг-репорт, что gawk работает согласно POSIX! Ужас!
…я оказался прав: главный разработчик gawk Аарон Роббинс подготовил патч, возвращающий старое поведение. В ближайшее время он будет добавлен в ветку git gawk-4.0-stable.
GNUgNUGNugnu!!!!!1111

Мудрёно устроена буферизация вывода в GNU AWK. В документации явно не объясняется, что там и как. В исходниках не разбирался. Сужу пока по strace'ам
Вот три примера. Прикольненько!
$ seq 1 10000 | strace -c -e trace=write gawk '{print "hello world";}'
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.002961 0 10000 write
------ ----------- ----------- --------- --------- ----------------
100.00 0.002961 10000 total

$ seq 1 10000 | strace -c -e trace=write gawk '{print "hello world">"/dev/null";}'
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.000371 0 10000 write
------ ----------- ----------- --------- --------- ----------------
100.00 0.000371 10000 total
$ seq 1 10000 | strace -c -e trace=write gawk '{print "hello world";}'>/dev/null
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
-nan 0.000000 0 30 write
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 30 total

gawk, похоже, печатает немедленно, а mawk буферизует.
там, где gawk делает 758798 вызовов write(), mawk достаточно 1975.
Угадайте, какая программа работает быстрее и во сколько раз?
Казалось бы, причем тут жидогну…

$ gawk 'BEGIN {print length("ы")}'
1
$ /opt/plan9/bin/awk 'BEGIN {print length("ы")}'
2
$ mawk 'BEGIN {print length("ы")}'
2
что, есть реализация всех этих команд лучше GNU? не смешно.

length[([s])]
Return the length, in characters, of its argument taken as a
string, or of the whole record, $0, if there is no argument.

Не в байтах, в символах.