【问题标题】:BEGIN and END block in groovy like in awkgroovy 中的 BEGIN 和 END 块,就像在 awk 中一样
【发布时间】:2011-03-14 01:40:34
【问题描述】:

https://issues.apache.org/jira/browse/GROOVY-1512,有一个补丁可用于执行类似于 awk 或 Perl 的 BEGIN 和 END 方法。这对于壳管道方案(例如对数字列表求和)可能很有用。

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

【问题讨论】:

    标签: groovy awk


    【解决方案1】:

    运行Groovy 1.8.4,答案为

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 2018-03-31
      • 2012-01-11
      • 2011-09-16
      • 2016-04-10
      • 1970-01-01
      相关资源
      最近更新 更多