【发布时间】:2015-09-08 13:16:52
【问题描述】:
我经常会通过gnu parallel 得到一个包含各种对象计数的大文件:
1201 object1
804 object1
327 object2
3828 object1
29 object2
277 object3
...
这通常会有数千行,其中包含不分特定顺序的各种对象。我想要每个对象的总计数的总和。我通常的做法是像这样组合一个 Perl 单行代码:
perl -lane '$O{$F[1]} += $F[0]; END {foreach $k (keys %O) {print "$k: $O{$k}"}}' countsfile
我通常会有一个由 parallel、awk、grep、sort、uniq、cut 等组成的管道,每个管道都有相当简洁的参数。 perl hack 是一个例外:它的输入时间很长,并且比管道的其他部分复杂得多。我总是觉得我在输入时指定的内容远远超出了我真正需要的内容。
所以我的问题是:有没有一种技术或实用程序可以让我做到这一点,而无需每次都编写完整的脚本?我希望能够在不使用 perl、awk、R 或其他实现通用语言的系统的情况下做到这一点。
【问题讨论】:
-
为什么不将脚本存储在一个文件中并简单地执行脚本?
-
我相信这里的标准解决方案是 awk 或 perl 单行。我,我很久以前就厌倦了,写了一个“数学编辑器”工具,让我可以轻松调用像
med 'sum(c1)'这样的东西,它只是对第 1 列求和,但由于这不是标准实用程序,它不是你的问题。 -
“标准”不是什么大不了的事——你有没有在任何地方发表过?
-
它在 eskimo.com/~scs/src/#med ,但恐怕它仍然对你没有帮助,因为我误读了你提出的问题,这最终比 med 可以处理的更复杂。跨度>
标签: perl unix command-line awk