从shell级简单的统计分析

我正在寻找一些方便的程序/脚本,我可以通过标准input数据,哪些可以给我一些input数据的基本统计数据。 例如 – 提供了由新行字符分隔的值集我想得到:

  • 所有值的平均值
  • 数据的平均值除最小值的5%和最大值的5%以外
  • 标准偏差

是的 – 我知道,可以用bash或awk来完成,但也许你已经知道一些方便吗?

PS。

我完全知道像八度和其他一些“大炮”,但我需要更简单的东西。

谢谢

这个小AWK片段将做你想要的一部分:

awk '{sum += $0; count++; vals[$0]++} END {mean = sum / count; print "Total: ", sum; print "Mean: ", mean; for (i in vals){ s += vals[i] * ((i - mean) ** 2) }; print "Standard Dev: ", sqrt(s/count)}' datafile 

降5%的部分会更复杂一点,取决于你的意思。

我知道你正在寻找jar装的东西,但没有使用R,Octave,SAS或SPSS,我什么都不知道。

编辑:更正公式

你可以尝试一些东西;

 perl -e 'use List::Util qw(sum);while($r = <>){push (@array, $r)}; print sum(@array) / @array'; 

得到平均水平。 你可以安装Statistics :: Descriptive包http://search.cpan.org/~colink/Statistics-Descriptive-2.6/Descriptive.pm

做你需要的其他requiremtns。 stdev可能很容易,另一个将采取更多的行来sorting和过滤。 (毫无疑问,它可能做一个单一的行… 😉

R可能正是你正在寻找的东西,也可能是为了你的目的而完全被杀死。 很难从你的问题中分辨出来。

无论如何,请查看http://en.wikipedia.org/wiki/R_(programming_language&#xFF09;

第一个和最后一个项目都是可行的(我已经做了几次),而没有将整个数据集保存在内存中,也不知道事件总数。 中间项目(放置exception值)更具挑战性,需要将整个列表保留在RAM中,或者至less要事先知道项目总数。

我不知道任何简单的预制工具可以做到这些(尽pipeOctave和R的声音好像可能是这样)。