如何在Bash中使用jq统计最新状态为Done的唯一用户数量
实现方案
使用jq工具可以直接完成该统计需求,无需额外复杂脚本。
命令示例
本地JSON文件统计
jq 'group_by(.user) | map(last | select(.status == "Done")) | length' 你的数据文件.json
直接对接API统计
如果是直接调用API获取数据,可以直接把curl结果通过管道传给jq:
curl 你的API地址 | jq 'group_by(.user) | map(last | select(.status == "Done")) | length'
命令逻辑说明
group_by(.user):将所有记录按照user字段分组,同一个用户的所有记录会被归到同一个子数组中。由于你提供的原始数据已经是按时间正序排列,所以每个用户对应的子数组也默认是按时间从早到晚排序的。map(last | select(.status == "Done")):遍历每个用户的分组,先取每个分组的最后一条记录(即该用户的最新记录),再筛选出status为Done的条目。length:统计符合条件的条目总数,输出结果就是你需要的统计值。
兼容无固定顺序的原始数据
如果后续遇到原始数据没有按时间排序的场景,可以额外加一步排序逻辑,保证取到的是每个用户的最新记录:
jq 'sort_by(.date) | group_by(.user) | map(last | select(.status == "Done")) | length' 你的数据文件.json
内容的提问来源于stack exchange,提问作者naregkar
相关产品推荐
相关产品推荐

