例如,有一个group_by_count脚本。
jq 'map(select(.sno|startswith("20")))|group_by(.school)[]|{k:.[0].school,len:length}'
字符串
此命令的输出有多个结果,如:
{k:xxx,len:111}{k:aaa,len:22}...
型
如果你想将这些结果合并到一个数组中,你需要用括号[]
Package 整个表达式。例如,你可以这样写:
jq '[map(select(.sno|startswith("20")))|group_by(.school)[]|{k:.[0].school,len:length}]'
型
请注意顶层[]
。
这可能有点麻烦,特别是在移动光标可能不方便的终端环境中。是否有更简单的方法,例如使用命令:
jq 'map(select(.sno|startswith("20")))|group_by(.school)[]|{k:.[0].school,len:length} | merge'
型
这样,对于用户来说,这将是一个“追加”的问题,而不需要移动光标。
预期产出:
[
{
"k": "xxx",
"len": 111
},
{
"k": "aaa",
"len": 22
}
]
型
2条答案
按热度按时间hfwmuf9z1#
如果要将这些结果合并到一个数组中,则需要用方括号[]将整个表达式括起来。
避免这样做的一种方法是避免在调用
group_by
之后使用[]
,因此过滤器将以以下方式结束:字符串
然而,由于jq程序无论如何都很长,您可能应该考虑将其放入文件并使用jq的-f选项。
值得一提的是,如果您在命令提示符下工作并发现自己处于所描述的情况,您总是可以简单地将流通过管道传输到
jq -s
。cetgtptt2#
如果你在POSIX shell中工作,你可以将输出管道到另一个jq调用:
字符串
-s
是“slurp”,它将把输入流中的所有对象放入一个数组中。An alternative is appendingjq -n '[inputs]'