假设我的文件对数字进行了排序,如下所示:
1
22
36
45
53
Run Code Online (Sandbox Code Playgroud)
我希望能够获得 36。另一方面,如果文件的行数为偶数,例如:
1
22
36
45
53
67
Run Code Online (Sandbox Code Playgroud)
我想要平均值 (36+45)/2。
我想我当然可以使用 wc 来获取行数并处理中间的行。但是有没有更优雅的方法来获得中位数?
使用专门为该工作设计的工具,例如 GNU datamash:
$ seq 5 | datamash median 1
3
$ seq 6 | datamash median 1
3.5
Run Code Online (Sandbox Code Playgroud)
这是一个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
Run Code Online (Sandbox Code Playgroud)