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

数组重复值统计:按值输出出现次数及对应位置

Bash数组value重复统计解决方案

问题说明

现有一个由value,location对构成的Bash数组:

arr=(test,meta my,amazon test,amazon this,meta test,google my,google hello,microsoft)

需求是统计每个value的出现次数,并列出其对应的所有location,预期输出:

3 test: meta, amazon, google
2 my: amazon, google
1 this: meta
1 hello: microsoft

现有代码要么只保留每个value的首个location,要么把value,location作为整体统计,均无法满足需求。

实现代码

#!/bin/bash

arr=(test,meta my,amazon test,amazon this,meta test,google my,google hello,microsoft)

# 声明关联数组:count存次数,loc_list存对应位置列表
declare -A count loc_list

# 遍历数组元素,拆分并统计
for item in "${arr[@]}"; do
    IFS=, read -r val loc <<< "$item"
    ((count[$val]++))
    # 构建位置列表
    [[ -n "${loc_list[$val]}" ]] && loc_list[$val]="${loc_list[$val]}, "
    loc_list[$val]+="$loc"
done

# 按次数降序输出结果
for val in "${!count[@]}"; do
    echo "${count[$val]} $val: ${loc_list[$val]}"
done | sort -rn

关键逻辑说明

  1. 关联数组使用:用declare -A声明两个关联数组,分别存储每个value的出现次数和对应的location集合,解决了普通数组无法用字符串作为键的问题。
  2. 元素拆分:通过IFS=, read将每个value,location元素拆分成独立的变量,实现value和location的分离。
  3. 位置列表构建:首次遇到value时直接赋值location,后续遇到时追加新的location并添加分隔符,保证格式统一。
  4. 排序输出:最后通过sort -rn按次数从高到低排序,匹配预期的输出顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:52:14