首页 > 解决方案 > 如何获取文件中排序值的中位数?

问题描述

假设我的文件对数字进行了排序,如下所示:

1
22
36
45
53

我希望能够得到 36。另一方面,如果文件有偶数行,例如:

1
22
36
45
53
67

我想要平均 (36+45)/2。

我想我当然可以使用 wc 来获取行数并使用中间的行。但是有没有更优雅的方法来获得中位数?

标签: bashawk

解决方案


这是一个awk版本,没有那么优雅datamash

$ seq 6 | awk '{a[NR]=$1} END{m=int(NR/2)+1; print (NR%2?a[m]:(a[m-1]+a[m])/2)}'
3.5

推荐阅读