由于您还没有关注minimal complete verifiable example
指导方针,很难知道解决问题的最佳方法是什么,但是无论您采用哪种方法,重要的是要记住 --arg 始终传入 JSON 字符串。它不能用于传入 jq 程序片段,除非片段是 JSON 字符串。
让我们考虑一个选项:传入一个 JSON 对象,该对象表示您可以在程序中使用的路径。
所以调用可能是:
jq -f count_by.jq --argjson group '["header", "messageType"]'
程序将以:
group_by(getpath($group)) | ...
吃蛋糕...
如果真的要传入.header.messageType之类的参数,有办法:将字符串$group转成jq路径:
($group|split(".")|map(select(length>0))) as $path
所以你的 jq 过滤器看起来像这样:
($group|split(".")|map(select(length>0))) as $path
| group_by(getpath($path)) | map({group: $group, cnt: length})
Shell 字符串插值
如果您想要一个带有许多注意事项的快速 bash 解决方案:
group=".header.messageType"
jq 'group_by('"$group"') | map({group: "'"$group"'", cnt: length}'