Bash 如何获得文件中排序值的中值?

Bash 如何获得文件中排序值的中值?,bash,awk,Bash,Awk,假设我的文件对数字进行了排序,如下所示: 1 22 36 45 53 我希望能拿到36分。 另一方面,如果文件的行数为偶数,则如下所示: 1 22 36 45 53 67 我想要平均值(36+45)/2 我想我当然可以用WC来获取线条的数量,并用中间的线条来处理。但是,有没有更优雅的方法来获取中值?使用专门为该作业设计的工具,例如GNU datamash: $ seq 5 | datamash median 1 3 $ seq 6 | datamash median 1 3.5 这是一个a

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

1
22
36
45
53
我希望能拿到36分。 另一方面,如果文件的行数为偶数,则如下所示:

1
22
36
45
53
67
我想要平均值(36+45)/2


我想我当然可以用WC来获取线条的数量,并用中间的线条来处理。但是,有没有更优雅的方法来获取中值?

使用专门为该作业设计的工具,例如GNU datamash:

$ seq 5 | datamash median 1
3
$ seq 6 | datamash median 1
3.5

这是一个
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

我很难想象有什么更优雅的东西。这能回答你的问题吗:你想要文件中包含的数字的平均值,还是想要文件中的行数除以2?python3-c“导入文件输入为FI,统计为STAT;I=[float(l.rstrip())for l in FI.input()];print(STAT.media(I))”完成了我想要的。谢谢@mattb!完成。希望现在更清楚