如何获取文件中排序值的中位数?
假设我的文件对数字进行了排序,如下所示:
1
22
36
45
53
我希望能够获得 36。另一方面,如果文件的行数为偶数,例如:
1
22
36
45
53
67
我想要平均值 (36+45)/2。
我想我当然可以使用 wc 来获取行数并处理中间的行。但是有没有更优雅的方法来获得中位数?
回答
这是一个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