与Ruby命令行类似的Awk-BEGIN和END

时间:2011-12-02 13:15:18

标签: ruby unix command-line awk

关于Ruby的一个很酷的事情是它能够像典型的Unix命令行工具一样运行,类似于(官方文档中的示例):

$ echo "matz" | ruby -pe '$_.upcase!'
MATZ
另一方面,awk可以对来自标准输入的行执行聚合,例如,对一系列数字求和:

$ for (( i=0; $i < 50; i++ )); do echo $i; done | awk 'BEGIN { tot=0; } { tot += $0 } END { print tot }'
1225

我想知道是否可以让Ruby执行上面的Awk BEGINEND块所实现的功能,以便能够执行类似的聚合操作。

2 个答案:

答案 0 :(得分:5)

seq 49 | ruby -pe 'BEGIN { $tot=0 }; $tot += $_.to_i; END { print $tot }'

答案 1 :(得分:2)

实际上,ruby也有BEGIN / END块支持。例如请参阅此博文:http://burkelibbey.posterous.com/rubys-other-begin

更多文档:http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html#UA

HTH