在JQ中按多个键降序排序 [英] Sort descending by multiple keys in jq

查看:17
本文介绍了在JQ中按多个键降序排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数组:

[{
    "name": "Object 1",
    "prop1": 5,
    "prop2": 2
}, {
    "name": "Object 2",
    "prop1": 6,
    "prop2": 4
}, {
    "name": "Object 3",
    "prop1": 5,
    "prop2": 3
}]

我想对此数组进行排序,类似于此SQLORDER BY prop1 DESC, prop2 ASC,因此结果如下:

[{
    "name": "Object 2",
    "prop1": 6,
    "prop2": 4
}, {
    "name": "Object 1",
    "prop1": 5,
    "prop2": 2
}, {
    "name": "Object 3",
    "prop1": 5,
    "prop2": 3
}]

如何对数组进行排序?a)按一个键降序,b)按多个键降序?

版本:JQ 1.5

推荐答案

在JQ中,数组按其包含的元素的顺序排序。即:

$ jq -n '[1, 2] < [1, 3], [1, 2] < [2, 1]'
true
true
sort_by筛选器对数组进行排序,将一个表达式作为参数,将为该数组的每个成员计算该参数。例如,如果要按长度对单词列表进行排序:

$ jq -n '["prop", "leo", "column", "blast"] | sort_by(length)'
[
  "leo",
  "prop",
  "blast",
  "column"
]

如果提供给sort_byas参数的表达式返回多个值,则返回值将隐式包装在数组中,该数组将遵守上面提到的数组排序规则。例如,如果要先按长度,然后按字母顺序对单词列表进行排序:

$ jq -n '["pro", "leo", "column", "ablast"] | sort_by(length, .)'
[
  "leo",
  "pro",
  "ablast",
  "column"
]

了解这一点,并考虑到您的示例中的值是数值,您只需执行以下操作:

$ jq 'sort_by(-.prop1, .prop2)'

这篇关于在JQ中按多个键降序排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆