用jq分组一个元素

时间:2018-11-09 16:15:50

标签: jq

我有以下json:

{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d2"},"org":"TΙ UIH","rc":{"$event":"13"}}
{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d3"},"org":"TΙ UIH","rc":{"$event":"13"}}
{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d4"},"org":"AB KIO","rc":{"$event":"13"}}
{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d5"},"org":"GH SVS","rc":{"$event":"17"}}

我如何获得以下输出结果? (tsv)

13 TΙ UIH 2
13 AB KIO 1
17 GH SVS 1

与我搜索的内容相距甚远

jq -sr 'group_by(.org)|.[]|[.[0].org, length]|@tsv'

我如何再添加一个group_by以达到所需的结果?

1 个答案:

答案 0 :(得分:1)

我可以使用以下示例从示例JSON中获得预期结果:

group_by(.org, .rc."$event")[] | [.[0].rc."$event", .[0].org, length] | @tsv

您可以try it on jqplay.org

group_by子句的修改可确保我们每对.org / .rc.$event会有一个条目(没有它,我们只有.org会有一个条目,可能会隐藏一些.rc.$event)。

然后,像使用.rc.$event一样,将.org添加到您创建的数组中,访问数组第一项的值,因为我们知道它们都是一样的。

要对结果进行排序,可以将其放入数组中并使用sort_by(.[0]),它将按行的第一个元素进行排序:

[group_by(.org, .rc."$event")[] | [.[0].rc."$event", .[0].org, length]] | sort_by(.[0])[] | @tsv
相关问题