如何用jq对JSON中id字段去重并按字母排序输出?
问题描述
给定如下JSON结构:
{ "root": { "elements": [ { "id": "abcd" }, { "id": "efgh" }, { "id": "abcd" } ] } }
需要提取id字段的值,按字母顺序排序并去除重复项,期望输出:
abcd efgh
使用jq '.root.elements[].id'可提取所需数据,但unique命令要求输入字符串/数字数组,当前直接提取的是分散的字符串而非数组。需要跨操作系统通用的方案,不能依赖sort、unique等Unix工具。
解决方案
可以通过jq的数组构造和内置命令组合实现需求,完整命令如下:
jq -r '[.root.elements[].id] | unique | sort | join("\n")' input.json
各部分作用说明:
[.root.elements[].id]:将提取到的所有id值封装为一个字符串数组,满足unique和sort的参数要求unique:对数组元素去重sort:对去重后的数组按字母顺序排序join("\n"):将数组元素用换行符连接成单行字符串-r参数:让jq输出原始字符串(不带双引号),匹配期望的输出格式
执行该命令后,输出结果与预期一致:
abcd efgh
内容的提问来源于stack exchange,提问作者uiuaa
相关产品推荐
相关产品推荐

