to post messages and comments.

@Renha:

Упоролся в последние дни sed, затем postscript, awk, и несколько сторонних утилит.

А казалось бы, всего-то надо pdf-файл правильно порезать на кусочки.

@Strephil:

$ echo 923 | gawk '{x = "0x"$1; x *= 16; print x}'
0
$ echo 923 | nawk '{x = "0x"$1; x *= 16; print x}'
37424
$ echo 923 | mawk '{x = "0x"$1; x *= 16; print x}'
37424

@Strephil:

Говно. Наткнулся на багу в busybox'ном awk'е, версия 1.22.0, почему-то числа с ведущими нулями трактует как шестнадцатеричные.
Что за херня :-(

@caban:

AWK — крутейшая штука, сегодня написал на нём скрипт, всё правильно и приятно.

@qnikst:

в файле строку вида:

package-db: prefix.cabal-sandbox/postfix

нужно превратить в:

package-db: prefix.cabal-sandbox/postfix:/prefix/.cabal-sandbox-shared/postfix

как наиболее просто?

@Strephil:

Последнее время мне начинает нравиться awk. Для одноразового использования самое то, когда вот так легко ввод разделяется на поля и записи.
Единственное, что вот этот мерзкий C-подобный синтаксис.

А вот была бы какая-то смесь awk'а с python'ом.

@Strephil:
awk

Сегодня редкий случай — когда я использовал awk для дела
Вообще, это действительно очень удобно, когда вот можно указать RS, и разбирать себе потихоньку записи.

@Self-Perfection:

Подумалось мне, что надо бы поучить perl, и я даже почти дал себе зарок некоторое время использовать для парсинга логов только perl, вместо стандартных grep/cut/sed/awk/.... Но первый же эксперимент мне не понравился. Оригинальный однострочник:

$ time awk '{a[$7]+=1} END{for(k in a){print k}}' $LOG |wc -l
840

real 0m0.292s
user 0m0.254s
sys 0m0.034s

И перевод его на perl:

$ time perl -lane 'END{print scalar(keys %a)} $a{$F[6]}=();' $LOG
840

real 0m6.416s
user 0m6.380s
sys 0m0.018s

получилось длиннее и медленнее. Печально.

@Strephil:

Переделан механизм расширений, с помощью которых, как я понимаю можно добавлять функции на C.
При этом из коробки есть расширение, которое аналогично -i в sed.

@Strephil:

О, вышел GNU AWK 4.1.0!!!

@mc:

павк — это как авк, только на питоне!1
github.com

@Oksion:

господа линуксоиды, у вас есть шанс реально доказать превосходство линукса над остальными недооперационками, помогите пожалуйста как-то распарсить html файл. Суть в том что нужно найти в нём текст по шаблону <set value='значение' name='дата' /> и сделать из этого csv вида "значение, дата"

@syjgin:

Сегодня по просьбе начальника писал спаморассылалку о новой версии местной софтины. Наверное, я-из-прошлого меня бы убил за такое

@gelin:

Блин! xargs с ключиком -0 вообще работает? Как нормально скормить ему кучку прогрепаных путей с ПРОБЕЛАМИ?

@Strephil:

Ура! Ура! Gnu Awk 4.0.1 is available now!

@Strephil:
awk

В чем все-таки скрытый смысл, что синус есть, косинус есть, а тангенса — увы.
Как это можно логически запомнить, или как это принято в мире unix, нужно зазубрить, как мартышка: синус есть, косинус есть, тангенса нет?

@Strephil:

Выпущен бета-релиз того, что будет 4.0.1
я уже совсем засыпаю, так что подробности завтра, спокойной ночи, жуйк!

@Strephil:

Вот интересно, в стабильную версию системы 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, как-то так.

@cormorant:

Заменить в файле вида (дата-время отделены от значения табуляцией)
01.01.2000 11:00:00 60391.7
01.01.2000 11:02:00 60391.79
01.01.2000 11:04:00 60391.8
01.01.2000 11:06:00 60391.77
01.01.2000 11:08:00
01.01.2000 11:10:00 60391.68
01.01.2000 11:12:00 60391.66
строчки, где пропущено значение, на 0, сделал так
awk '{if (length($3) < 2) {print $1" "$2"\t"0} else {print $0}}' file.dat
Результат ясен. Можно было не записывать

@ramok:

диссскотека! танцует MC Птиц core.org.ua и клип core.org.ua

@ramok:

шматрица: clear; tput civis; awk 'BEGIN{for(;;) {printf("'$(tput cuu1)$(tput ri)'\033[0;32m");for(i = 1; i <= '$COLUMNS'; i++) printf("%lc", (rand() * 20) < 2 ? (rand() * 127 + 32) : " "); print ""; system("sleep " rand())}}'

@Strephil:

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

@Strephil:

Во-первых,
openbsd # echo '\\' | awk '{gsub("\\\\","\\\\");print}'
\\\\
Во-вторых,
gnu# echo '\\' | awk '{gsub("\\\\","\\\\"); print}'
\\
GNU слѣдует POSIX, OpenBSD сосет хуйцы.

@Strephil:
awk

# echo ' foo' | awk '{$2 = "bar"; print}'
foo bar

почему пропадает пробел перед foo?

@ramok:

прЮвет! awk 'BEGIN{h="__\\/||//||\\\\||\\/";split(h, a, //); for(;;) { for (i=1; i< length(a); i+=2) { printf " "a[i]"o"a[i+1]" .oO(прЮвет!)\r"; system("sleep 0.3") }}}'

@Strephil:

Мудрёно устроена буферизация вывода в 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

@Strephil:

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

@Strephil:

Ура! Четвертый gawk действительно вышел, Аарон Роббинс действительно написал такое письмо: lists.gnu.org Скачать коды: ftp.gnu.org

@Strephil:

Нашел на gnu.org файл:
ftp.gnu.org это что, он уже вышел, да? Релиз? Написано, 29 июня.

@Strephil:

Первая бета-версия GNU awk 4.0 вышла в свет! Можно тестировать! Ура!

@Gem:

Полезные одно-строчные скрипты sed (sed shell) opennet.ru
Вопрос знатокам sed — замена символов с файле opennet.ru

@Strephil:

$ 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.

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

@Strephil:
awk

Ну и как сделать простой аналог cut -f3?
Потому что print $3 печатает третье непустое поле. А как сделать, чтобы и пустые поля считались?

@Strephil:

awk никому не нужен. Для совсем простого слишком сложен, для чуть более сложного слишком ущербен. Вот нафига он стандарт POSIX? Даже не то, что лишние буквы. Сколько поощрение его включения в дистрибутивы, его изучения, использования.
Был бы стандартом, например, bash со всеми его башизмами. Или другие расширения GNU… Было бы куда лучше.

@Darion:

awk "music": kmkeen.com

@iorlas:

bashshell.net Основы awk. Для тех, кто всегда хотел, но не было времени.

@zelgadis:
awk

awk is great

@twsdwf:

задачка: есть рнр-файлик dbconn.php, стандартный для используемой cms, с настройками подключения в БД. и куча "висяка" в mysql. убиваем все запросы,длящиеся дольше 200секунд...
echo -e "SHOW PROCESSLIST;\n" | eval `echo "mysql";awk -F'=' 'function qstrip(s){sub(/^([^"]\")/,"\"",s);sub(/(\"[^"])$/,"\"",s);return s;}{if($1 ~ DBHost){printf " -h%s ",qstrip($2);}else if($1 ~ DBLogin){printf " -u%s ",qstrip($2);}else if($1 ~/DBPassword/){printf " -p%s ",qstrip($2)}else if($1~/DBName/){printf " %s ",qstrip($2);}}' dbconn.php` | awk '{if(n<=0){for (i=1;i<=NF;++i){if($i == "Time" ){n=i;break;}}}else if( ($n>200) && ($1>0) ){printf "kill %d;\n",$1;}}' |eval `echo "mysql";awk -F'=' 'function qstrip(s){sub(/^([^"]\")/,"\"",s);sub(/(\"[^"])$/,"\"",s);return s;}{if($1 ~ DBHost){printf " -h%s ",qstrip($2);}else if($1 ~ DBLogin){printf " -u%s ",qstrip($2);}else if($1 ~/DBPassword/){printf " -p%s ",qstrip($2)}else if($1~/DBName/){printf " %s ",qstrip($2);}}' dbconn.php`;

@r1s:

Продолжаю баловаться с awk, пишу всякие мелкие скрипты. В качестве объекта для экспериментов взял access.log lighttpd, считаю всякое, вывожу статистику. И чем дальше, тем больше нравится мне awk, добавить еще sed по вкусу и вообще замечательно.

@r1s:

Читаю туториалы по awk, до этого как-то не удавалось посмотреть, что за зверь. В общем могу сказать только одно: преодолей я свою лень и посмотри раньше на него — и жизнь бы стала намного проще, да и времени лениться было бы больше. Хороший и мощный язык для скриптов и мб больше.