如何从两个JSON文件中基于signature字段提取并导出唯一值
跨JSON文件按指定字段提取唯一值的jq实现方案
适用场景
两个结构一致的JSON文件,需按指定字段(本案例为signature)筛选出仅在两个文件中总共出现一次的条目,输出到第三个文件。
前置说明
假设你的两个输入文件分别命名为file1.json、file2.json,格式和你提供的示例一致,为JSON Lines格式(多个JSON对象直接拼接,无外层数组包裹)。
执行命令
jq -s 'group_by(.signature) | map(select(length == 1) | .[]) | .[]' file1.json file2.json > unique_result.json
命令参数解释
-s:将两个输入文件的所有JSON对象整合为一个数组,实现跨文件统一处理group_by(.signature):按signature字段对所有对象分组,相同signature的对象会被归入同一个子数组map(select(length == 1) | .[]):遍历所有分组,仅保留长度为1的分组(对应仅出现一次的唯一signature),再将分组展开为单个对象- 末尾的
.[]:将输出还原为和输入一致的JSON Lines格式,若你需要输出为数组格式,删除该部分即可
效果验证
假设file1.json包含signature为s1、s2的两个条目,file2.json包含signature为s2、s3的两个条目,执行命令后unique_result.json会输出s1、s3对应的两个条目,符合唯一值要求。
内容的提问来源于stack exchange,提问作者MonteCarloSims
相关产品推荐
相关产品推荐

