Пользовательская функция AWK - новый синтаксис? - PullRequest
2 голосов
/ 08 декабря 2011

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

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

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

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

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

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

или

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 - так это что-то, что было введено в более поздней версии?

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

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

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

identifier(parameter) = ...

не работает ни с одним из протестированных мною вариантов: GNU awk (3, 4 - последний на данный момент), AT & T Bell's awk и Мок .

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

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

0 голосов
/ 08 декабря 2011

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

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

...