如何从第一列有数字的文件中获取平均数、中位数、均值统计数据?
How to get average, median, mean stats from a file which has numbers in first column?
我有一个文件,其中有如下几秒钟的数字:
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
从该文件中获取 "average"、"mean"、"median"、“95th percentile”和“99th percentile”的最佳方法是什么?我的 linux 框中有这个文件,所以我需要一些 linux 命令来获取这些统计信息。
如果您不受任何特定工具的限制,请在文本文件上尝试 GNU datamash
- a nice tool for "command-line statistical operations"。
获取第一个 column/field 的均值、中位数、第 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
如上一个工具所述 datamash
是一个非常强大的工具!
如果你想要完整的 awk
解决方案:
平均值:(变量被awk
自动初始化为零)
awk '{ sum += ; n++ } END { if (n > 0) print sum / n; }'
或 Shebang 表示法:
#!/bin/awk
{ sum += }
END { if (NR > 0) print sum / NR }
中位数:
#/usr/bin/env awk
{
count[NR] = ;
}
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([=14=]){a[c]=[=14=];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
我有一个文件,其中有如下几秒钟的数字:
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
从该文件中获取 "average"、"mean"、"median"、“95th percentile”和“99th percentile”的最佳方法是什么?我的 linux 框中有这个文件,所以我需要一些 linux 命令来获取这些统计信息。
如果您不受任何特定工具的限制,请在文本文件上尝试 GNU datamash
- a nice tool for "command-line statistical operations"。
获取第一个 column/field 的均值、中位数、第 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
如上一个工具所述 datamash
是一个非常强大的工具!
如果你想要完整的 awk
解决方案:
平均值:(变量被awk
自动初始化为零)
awk '{ sum += ; n++ } END { if (n > 0) print sum / n; }'
或 Shebang 表示法:
#!/bin/awk
{ sum += }
END { if (NR > 0) print sum / NR }
中位数:
#/usr/bin/env awk
{
count[NR] = ;
}
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([=14=]){a[c]=[=14=];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