jq使用unique_by按key去重时如何保留重复项的最后一个实例
实现方案
你的需求完全可以通过unique_by实现,也可以用group_by实现更直观的逻辑,两种方案如下:
方案1:基于unique_by实现(推荐,逻辑简单性能优)
核心思路是先反转数组,让相同name的最后出现的实例排在最前面,unique_by去重时会保留首条匹配实例,最后再将数组反转回原有顺序即可。
执行命令:
cat file.json | jq 'reverse | unique_by(.name) | reverse'
补充:你当前使用的
unique_by( {name} )可以简化为unique_by(.name),二者效果完全一致,写法更简洁。
方案2:基于group_by实现(逻辑更直观)
核心思路是先按name字段分组,每组直接取最后一个元素即可。
执行命令:
cat file.json | jq 'group_by(.name) | map(last)'
两种方案最终输出都和你期望的结果完全一致。
内容的提问来源于stack exchange,提问作者MaryCoding
相关产品推荐
相关产品推荐

