如何在jq中合并多个结果?默认数组构造方式不够便捷
简化jq零散结果合并为数组的操作
现有一段用于分组计数的jq脚本:
jq 'map(select(.sno|startswith("20")))|group_by(.school)[]|{k:.[0].school,len:length}'
执行后会输出多个零散的JSON对象,格式如下:
{k:"xxx",len:111}{k:"aaa",len:22}...
要把这些零散结果合并为单个数组,常规做法是将整个表达式用[]包裹,示例如下:
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 } ]
内容的提问来源于stack exchange,提问作者EulerTao
相关产品推荐
相关产品推荐

