如何使用jq从JSON列表中选取rhel目录下build号最高的对象名
你遇到的报错是因为select筛选后输出的是包含name字段的完整对象,不是字符串类型的name值,直接调用split方法会因为输入类型不匹配抛出错误,需要先提取.name字段再做分割处理。
正确执行命令
jq -r '.objects | map(select(.name | test("rhel/."))) | max_by(.name | split(".")[-2] | tonumber) | .name' file.json
命令逻辑拆解
- 第一步用
map(select(.name | test("rhel/.")))筛选出所有rhel目录下的非文件夹对象,保留完整对象结构用于后续排序 - 第二步用
max_by计算build号最高的对象:对每个对象的name值按.分割,取倒数第二个元素(即.txt后缀前的build号)转为数字作为排序依据,自动选出最大值对应的对象 - 最后输出目标对象的
name字段值
用你提供的示例数据执行该命令,会直接输出期望结果rhel/app-3.11.4.629600.txt。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

