Вот тут http://www.gnu.org/software/gawk/manual/gawk.html#GNU-Regexp-Operators сказано что \w должно работать, а у нас не работает: gawk: ./analyze.awk:3: warning: escape sequence `\w' treated as plain `w'
Не работает в частности при присвоении переменной RS. работает (разделяет записи и выводит всё начиная со второй): $ echo -e "aaa\n--\nbbbb" | gawk 'BEGIN {RS="\n[^[:alnum:]]+\n"}; NR>1' не работает (не разделяет записи, соответственно весь ввод одна большая запись): $ echo -e "aaa\n--\nbbbb" | gawk 'BEGIN {RS=/\n[^\w]+\n/}; NR>1'
На самом деле \w работает, если им правильно пользоваться: 1) Присваивание вида RS=/...regexp.../ не работает: http://www.gnu.org/software/gawk/manual/gawk.html#Using-Constant-Regexps Нужно использовать строковую константу: RS="...regexp..." 2) В строковой константе нужно дублировать '\', поскольку они там интерпретируются дважды - при разборе строковой константы и при анализе regexp. Для "\n" это не обязательно, поскольку символ новой строки, попавший в regexp, обрабатывается так же, как и последовательность '\n', а вот "\w" в строковой константе вызывает предупреждение, и до regexp доходит только в виде "w". 3) Запись [^\w] в regexp не работает - \w в этой реализации нельзя включать в набор символов [...], можно использовать только как самостоятельный элемент regexp. Исправленный и работающий вариант теста: $ echo -e "aaa\n--\nbbbb" | gawk 'BEGIN {RS="\\n\\W+\\n"}; NR>1' либо вариант с экономией '\': echo -e "aaa\n--\nbbbb" | gawk 'BEGIN {RS="\n\\W+\n"}; NR>1'
Сергей, спасибо.