如何从第一列中包含数字的文件中获取平均值,中位数,平均值?

时间:2017-11-15 23:33:14

标签: linux unix statistics ubuntu-14.04

我有一个文件,我可以在几秒钟内获得数字,如下所示:

0.01033
0.003797
0.02648
0.007583
0.007491
0.028038
0.012794
0.00524
0.019655
0.019643
0.012969
0.011087
0.044564

我能获得的最佳方式是什么?#34;平均","意味着","中位数","第95百分位数"和"第99百分位"从这个文件?我的linux文件夹中有这个文件,所以我需要一些linux命令来获取这些统计信息。

2 个答案:

答案 0 :(得分:4)

如果您没有使用任何特定工具,请尝试使用GNU datamash - 一个很好的工具,用于文本文件中的“命令行statistical operations ”。

获取第一列/字段的平均值,中位数,百分位数95和百分位数99值(注意,字段为TAB - 默认情况下是分开的):

$ datamash --header-out mean 1 median 1 perc:95 1 perc:99 1  < file
mean(field-1)   median(field-1) perc:95(field-1)    perc:99(field-1)
0.016128538461538   0.012794    0.0346484   0.04258088

答案 1 :(得分:0)

正如上一个工具datamash中所解释的那样,它是一个非常强大的工具! 如果您想要一个完整的awk解决方案:

平均值(变量由awk自动初始化为零)

awk '{ sum += $1; n++ } END { if (n > 0) print sum / n; }'

或在Shebang符号中:

#!/bin/awk

{ sum += $2 }
END { if (NR > 0) print sum / NR }

<强>平均:

#/usr/bin/env awk
{
    count[NR] = $1;
}
END {
    if (NR % 2) {
        print count[(NR + 1) / 2];
    } else {
        print (count[(NR / 2)] + count[(NR / 2) + 1]) / 2.0;
    }
} 

您需要在使用之前对文件进行排序:

sort -n data_file | awk -f median.awk

第95百分位:

sort file -n | awk 'BEGIN{c=0} length($0){a[c]=$0;c++}END{p5=(c/100*5); p5=p5%1?int(p5)+1:p5; print a[c-p5-1]}'

最后但并非最不重要的是,您可以使用 Miller https://github.com/johnkerl/miller/tree/v4.5.0