我有时会发现自己编写 awk 脚本来计算一些简单的统计数据。例如计算直方图、值的平均值、标准差甚至方差......
在子句等中使用辅助数组/变量和 for 循环一次又一次地这样做,END
感觉有点乏味且容易出错。
在跟踪对于此类任务,有一个非常棒的语法,他们称之为聚合。它的概念/API 类似Boost C++ 库中的累加器。
因此我的问题是:是否有 awk 变体提供类似的概念/语法,可以方便地迭代计算此类统计数据?
这种语法的一个富有想象力的例子:
$ someawk '{ @time[$1] = avg($2) }' measurements.log
prog1 150
prog2 200
....
(其中第一列包含程序名称,第二列包含一个测量的运行时间,measurements.log
包含每个程序的多个测量,聚合函数avg
计算平均值)
答案1
awk 是为简单的文本处理而设计的。如果您想要更多,那么您需要放弃 awk 并使用更强大的语言。
珀尔是自然的进展。它具有 awk 的大部分功能和类似的语法,并且默认安装在大多数非嵌入式 UNIX 系统上。我不知道有任何库可以进行您所描述的统计分析,但是有许多图书馆在那里。
对于统计分析,选择的语言是右。它在文本处理方面比 awk 弱,因此除非您的数据已经采用 R 可以理解的格式,否则您需要首先对其进行处理,可能通过将 awk 管道传输到 R 中来实现。请参阅有没有办法在单个命令中获取数字列表的最小值、最大值、中位数和平均值?有关使用 R 的示例,与您的示例类似。