【问题标题】:How to get average, median, mean stats from a file which has numbers in first column?如何从第一列有数字的文件中获取平均、中位数、平均统计数据?
【发布时间】:2017-11-15 23:33:14
【问题描述】:

我有一个文件,其中包含以秒为单位的数字,如下所示:

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

从该文件中获取“平均值”、“平均值”、“中位数”、“第 95 个百分位”和“第 99 个百分位”的最佳方法是什么?我的 linux 盒子里有这个文件,所以我需要一些 linux 命令来获取这些统计信息。

【问题讨论】:

    标签: linux unix statistics ubuntu-14.04


    【解决方案1】:

    如果您未绑定到任何特定工具,请尝试 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
    

    【讨论】:

    • 如何在我的 ubuntu 14 机器中安装 datamash?
    • sudo apt-get install datamash.
    • E: Unable to locate package datamash 我现在使用的是 ubuntu 14。
    • 是的,好像是not present in trusty。然后你可以install from source。
    • 平均值不等于平均值​​吗?
    【解决方案2】:

    正如前面所说的工具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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多