You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中获取随机生成数字的众数?

没问题!我来一步步教你怎么在Bash里找出一组数字(包括随机生成的)的众数——就拿你给的[1,2,3,3,4]例子来说,最终能得到3这个结果。

第一步:准备你的数字数组

首先你需要有一组数字,可以是预先定义好的,也可以是随机生成的:

  • 如果你用示例数组:
    nums=(1 2 3 3 4)
    
  • 如果要随机生成一组数字(比如生成10个1-5之间的随机数):
    # 生成10个1到5的随机数,存到nums数组里
    nums=($(for i in {1..10}; do echo $((RANDOM%5+1)); done))
    

第二步:统计每个数字的出现次数

我们可以用sort把相同数字归到一起,再用uniq -c统计每个数字的出现次数:

# 将数组元素逐行输出,排序后统计次数
counts=$(printf "%s\n" "${nums[@]}" | sort | uniq -c)

执行后,counts里的内容会是类似这样的:

1 1
      1 2
      2 3
      1 4

每一行的第一个数是出现次数,第二个是对应的数字。

第三步:找出出现次数最多的众数

接下来我们要从统计结果里提取出现次数最多的数字:

# 按出现次数倒序排序,取第一行,提取数字部分
mode=$(printf "%s\n" "$counts" | sort -nr | head -n1 | awk '{print $2}')

# 输出结果
echo "数组的众数是:$mode"

运行这段代码,示例数组就会输出数组的众数是:3,完美符合你的预期!

额外处理:多个众数的情况

如果你的数组有多个出现次数相同的众数(比如[1,1,2,2,3]),上面的方法只会取第一个。想要找出所有众数,可以这样做:

# 先获取最大的出现次数
max_count=$(printf "%s\n" "$counts" | sort -nr | head -n1 | awk '{print $1}')

# 找出所有出现次数等于最大次数的数字
modes=$(printf "%s\n" "$counts" | awk -v max="$max_count" '$1 == max {print $2}')

echo "数组的众数有:$modes"

对于数组[1,1,2,2,3],这段代码会输出数组的众数有:1 2。

内容的提问来源于stack exchange,提问作者BigO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:22:35