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

如何在Bash中按ID统计对应列的唯一值数量?

问题:统计每个ID对应的第二列唯一值数量

输入文件file.txt内容如下:

ABC123 111111
ABC123 111111
ABCDEF 333333
ABCDEF 111111
CCCCCC 333333
ABC123 222222
DEF123 444444
DEF123 444444

需求:统计每个相同ID对应的第二列中唯一值的数量,期望输出格式为:

ABCDEF 2
ABC123 2
DEF123 1
CCCCCC 1

当前尝试的命令只能统计第一列的唯一值:

cut -d " " -f1 "file.txt" | uniq -cd | sort -nr | head

解决方案

方法1:使用awk实现(推荐)

通过awk的二维数组直接记录每个ID对应的唯一值集合,最后统计数量:

awk '{ seen[$1][$2] } END { for (id in seen) print id, length(seen[id]) }' file.txt | sort -k2nr
  • 原理:二维数组seen[$1][$2]会自动为每个ID去重存储对应的第二列值;
  • END块遍历所有ID,输出ID和对应唯一值的数量;
  • 末尾的sort -k2nr让结果按第二列数值降序排列,和示例输出一致。

方法2:结合sort、uniq、awk实现

先对每行的ID+值组合去重,再统计每个ID的出现次数:

sort -u file.txt | awk '{ count[$1]++ } END { for (id in count) print id, count[id] }' | sort -k2nr
  • sort -u file.txt:保留所有ID+值的唯一组合;
  • awk统计去重后每个ID的出现次数,即为该ID对应的第二列唯一值数量;
  • 同样用sort -k2nr完成降序排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:17:04