Блок BEGIN и END в groovy, как в awk

На https://issues.apache.org/jira/browse/GROOVY-1512 доступен патч для выполнения методов BEGIN и END, подобных awk или Perl. Это может быть полезно для сценариев конвейерной обработки оболочки, таких как суммирование списка чисел.

Я пробовал различные варианты синтаксиса, используя текущую версию Groovy, но она не выполняется. Может ли кто-нибудь сказать мне, что такое правильный синтаксис и привести пример для него?

Детально перефразируя вопрос. Если у меня есть следующее,

my-desktop# du -s * | cut -f 1

4
1976
4
16
16
24
16
16
16
16
16
524
20
16
20
20
4
4
4
4
364
2356
4
5992
28
8

Я хочу что-то вроде следующего (вдохновленного awk), которое напечатало бы его сумму:

du -s * | cut -f 1 | groovy -a -n -e 'def sum; BEGIN{sum =0; }END {println sum;}sum=sum+split[0].toInteger()'

Если специальные замыкания или функции BEGIN и END еще не реализованы, то как мне напечатать сумму всего списка чисел, переданных из других команд Unix?


person user658098    schedule 14.03.2011    source источник


Ответы (1)


Запустив Groovy 1.8.4, ответ дается как

du -s * | groovy -a '\s+' -ne 'def begin() {sum = 0}; def end() {println sum}; sum += split[0] as Long'
person John    schedule 03.12.2011