我有以下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以达到所需的结果?
答案 0 :(得分:1)
我可以使用以下示例从示例JSON中获得预期结果:
group_by(.org, .rc."$event")[] | [.[0].rc."$event", .[0].org, length] | @tsv
对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