首页 > 解决方案 > jq - 按值排序

问题描述

我有以下结构:

{"ID":"XX","guid":1}
{"ID":"YY","guid":2}
...

我试过运行:

jq 'sort_by(.guid)' conn.json

但是我得到一个错误:

Cannot index string with string "guid"

请您告诉我如何按 guid 对文件进行排序和/或找到 guid 最大的记录?

更新

我真正要寻找的是数据集中 GUID 最大的记录。以为排序会对我有所帮助,但事实证明它很慢

谢谢

标签: jsonjq

解决方案


sort_by假设它的输入是可迭代的,并.[]在对其成员排序之前通过应用来扩展它。您正在向它提供一个对象流,并且在这种情况下,每个对象都扩展为一个不可索引值("XX", 1等)流,因此.guid失败。

啜它们以使其工作,例如:

jq -s 'sort_by(.guid)[]' conn.json

要提取具有最大 GUID 的对象,您不会手动对 slurped 输入进行排序;对于此类任务,jq 具有max_by,例如:

jq -s 'max_by(.guid)' conn.json

reduce,对于大量输入来说,这是一种更方便的构造,并且无需 slurping。

jq 'reduce inputs as $in (input; if $in.guid > .guid then $in else . end)' conn.json

推荐阅读