Пользовательская функция AWK — новый синтаксис?

При поиске быстрого способа правой обрезки текстовой строки я нашел следующую вики-страницу:

страница обрезки вики

В главе об AWK приводится 2 набора примеров:

ltrim(v) = gsub(/^[ \t]+/, "", v)

rtrim(v) = gsub(/[ \t]+$/, "", v)

trim(v)  = ltrim(v); rtrim(v)

or

function ltrim(s) { sub(/^[ \t]+/, "", s); return s }

function rtrim(s) { sub(/[ \t]+$/, "", s); return s }

function trim(s)  { return rtrim(ltrim(s)); }

Нижний пример полностью знаком и отлично работает, но первый пример отличается от всего, что я видел за 20 лет программирования на AWK. Похоже, это действительно полезный быстрый способ определить и использовать функцию в одной строке. Я не могу заставить этот синтаксис работать в GNU Awk 3.1.5 — значит, это что-то, что было представлено в более поздней версии?

Буду признателен за реальный рабочий пример, если кто-то знаком с этим синтаксисом.


person piquet00    schedule 08.12.2011    source источник
comment
первый пример - это просто псевдокод. вы должны использовать вторую форму, чтобы это было допустимым синтаксисом awk. Хотя должно было быть удобно :-)   -  person Fredrik Pihl    schedule 08.12.2011


Ответы (2)


Я полагаю, что этот пример просто неверен. Синтаксис

identifier(parameter) = ...

не работает ни с одним из проверенных мной вариантов: GNU awk (3, 4 — последние на данный момент), AT&T Bell awk и mawk .

Точно так же, как вызов неопределенной функции также приводит к ошибке, как и ожидалось.

Возможно, автор хотел лишь проиллюстрировать идею псевдокодом?

person Dimitre Radoulov    schedule 08.12.2011
comment
Я вижу - да, это имеет смысл. Спасибо, что нашли время, чтобы протестировать. - person piquet00; 08.12.2011

Насколько я понимаю, первый набор примеров не определяет функцию, а просто сообщает, что (отсутствующая) функция ltrim(s) может быть заменена на gsub(/^[ \t]+/, "", v) и т. д.

gsub кстати не нужен, sub было бы достаточно как в альтернативной функции.

person jlliagre    schedule 08.12.2011
comment
Да, при втором прочтении я думаю, что ваше понимание правильное. Часто мы слишком буквально :) - person Dimitre Radoulov; 09.12.2011