jq:基于过滤器的分区

时间:2019-05-16 21:11:51

标签: json group-by jq data-partitioning

假设我有以下内容:

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

给出[1,2,3,4,5,6,7]会返回:

[5,6,7]

我也有

jq 'map(select(. < 5))'
给定相同数据的

返回[1,2,3,4]。如何同时执行这些补充查询,以便得到例如:

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

2 个答案:

答案 0 :(得分:2)

jq有一个内置过滤器,用于按某些(可能是多值)条件进行分组:

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

产生:

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

答案 1 :(得分:1)

一种选择是使用reduce

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

这将产生:

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