如何使用jq计算中位数?

Luc*_*hik 2 json average median jq

如何使用 jq 计算数组的中位数 (P50)?jq手册描述了如何计算平均值,但我想得到中位数。

算法:给定一个数字列表,对其进行排序。如果条目数为奇数,则选择中间的条目。如果有偶数个条目,则计算中间两个的平均值。

例子:

echo '[1,5,9,3]' | jq <ANSWER>  # should output 4, since it's the mean of 3 and 5
echo '[1,9,2]' | jq <ANSWER>  # should output 2, since it's the middle element
echo '[]' | jq <ANSWER>  # undefined
Run Code Online (Sandbox Code Playgroud)

Luc*_*hik 7

回答:

sort |
  if length == 0 then null
  elif length % 2 == 0 then (.[length/2] + .[length/2-1])/2
  else .[length/2|floor] end
Run Code Online (Sandbox Code Playgroud)

这是指定算法的直接实现。