使用 Ruby 命令行实现类似于 awk 的 BEGIN 和 END

发布于 2024-12-18 23:36:48 字数 412 浏览 0 评论 0原文

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 块所实现的操作,以便至于能够进行类似的聚合操作。

One of the cool things about Ruby is its ability to behave like typical Unix command-line tools, to do things like (similar to the example from the official documentation):

$ echo "matz" | ruby -pe '$_.upcase!'
MATZ

Awk, on the other hand can perform an aggregation on lines from standard input, e.g., summing a sequence of numbers:

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

I'd like to know if it's possible to get Ruby to do what is being achieved by the Awk BEGIN and END blocks above so as to be able to do similar aggregation operations.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

因为看清所以看轻 2024-12-25 23:36:49
seq 49 | ruby -pe 'BEGIN { $tot=0 }; $tot += $_.to_i; END { print $tot }'
seq 49 | ruby -pe 'BEGIN { $tot=0 }; $tot += $_.to_i; END { print $tot }'
那请放手 2024-12-25 23:36:49

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

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

HTH

Actually ruby has BEGIN/END block support as well. e.g. see this blog post: http://burkelibbey.posterous.com/rubys-other-begin

Some more documentation: http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html#UA

HTH

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文