按jq中的多个键降序排序
Sort descending by multiple keys in jq
我有以下数组:
[{
"name": "Object 1",
"prop1": 5,
"prop2": 2
}, {
"name": "Object 2",
"prop1": 6,
"prop2": 4
}, {
"name": "Object 3",
"prop1": 5,
"prop2": 3
}]
我想对类似于此 SQL ORDER 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_by
作为参数的表达式return有多个值,return值将被隐式包裹在一个数组中,以数组为准上面提到的排序规则。例如,如果您想按长度对单词列表进行排序,然后按字母顺序排序:
$ jq -n '["pro", "leo", "column", "ablast"] | sort_by(length, .)'
[
"leo",
"pro",
"ablast",
"column"
]
了解这一点,并考虑到您的示例中的值是数字,您可以执行以下操作:
$ jq 'sort_by(-.prop1, .prop2)'
我有以下数组:
[{
"name": "Object 1",
"prop1": 5,
"prop2": 2
}, {
"name": "Object 2",
"prop1": 6,
"prop2": 4
}, {
"name": "Object 3",
"prop1": 5,
"prop2": 3
}]
我想对类似于此 SQL ORDER 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_by
作为参数的表达式return有多个值,return值将被隐式包裹在一个数组中,以数组为准上面提到的排序规则。例如,如果您想按长度对单词列表进行排序,然后按字母顺序排序:
$ jq -n '["pro", "leo", "column", "ablast"] | sort_by(length, .)'
[
"leo",
"pro",
"ablast",
"column"
]
了解这一点,并考虑到您的示例中的值是数字,您可以执行以下操作:
$ jq 'sort_by(-.prop1, .prop2)'