BEGIN和END在awk中像Groov一样阻止

时间:2011-03-14 01:40:34

标签: groovy awk

http://jira.codehaus.org/browse/GROOVY-1512,有一个补丁可用于执行类似于awk或Perl的BEGIN和END方法。这对于s​​hell管道方案非常有用,例如汇总数字列表。

我使用当前版本的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命令中输入的所有数字列表的总和?

1 个答案:

答案 0 :(得分:1)

运行Groovy 1.8.4,答案是

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