使用jq提取JSON的name与size字段后如何按size数值排序
你出现报错的核心原因是
sort_by是jq内置的数组处理函数,仅能对jq内部的JSON数组对象生效。你在之前的命令中已经通过join(",")将每条结果处理为纯字符串,既不存在.size字段可供提取,也不符合sort_by要求的数组输入格式,因此触发报错。
方案1:在jq内部完成排序(推荐)
直接调整jq语句的执行顺序,先对全量数据按size数值排序,再做格式化输出,无需依赖外部工具:
jq -r 'sort_by(.size | tonumber) | .[] | [.name, .size] | join(",")' file.json
执行逻辑说明:先对整个输入的JSON数组按照size字段的数值类型完成排序,再遍历排序后的数组逐个取出name和size字段拼接为逗号分隔的字符串输出。
方案2:通过shell的sort命令对输出结果排序
如果你不想修改原有jq语句,可以直接追加shell的sort命令对已输出的逗号分隔文本做排序:
jq -r '.[] | [.name, .size] | join(",")' file.json | sort -t ',' -k 2n
参数说明:
-t ','指定字段分隔符为逗号-k 2n指定按第二列做数值类型排序
内容的提问来源于stack exchange,提问作者DisplayName
相关产品推荐
相关产品推荐

