jq:基于过滤器的分区

jq: partition based on a filter

假设我有以下内容:

jq 'map(select(. >= 5))'

给定 [1,2,3,4,5,6,7] 它 returns:

[5,6,7]

我也有

jq 'map(select(. < 5))'

给定相同的数据,returns [1,2,3,4]。我怎样才能同时进行这些补充查询,以便我收到例如:

[1,2,3,4], [5,6,7]

一种选择是使用 reduce:

reduce .[] as $x
([]; if $x < 5 then .[0] += [$x] else .[1] += [$x] end)

这将产生:

[[1,2,3,4],[5,6,7]]

jq 有一个 built-in 过滤器,用于按某些(可能 multi-valued)标准进行分组:

jq -nc '[1,2,3,4,5,6,7] | group_by(. < 5)'

产生:

[[5,6,7],[1,2,3,4]]