繁体   English   中英

JQ 在过滤器前添加(静态)header

[英]JQ Add (static) header before filter

考虑以下(简化的)JSON:

[
    {
        "type": "foo",
        "name": "test_1"
    },
    {
        "type": "bar",
        "name": "test_2"
    },
    {
        "type": "bar",
        "name": "test_3"
    }
]

我正在使用以下过滤器来生成我的 output:

group_by(.type)[][] | "\(if "type" == "foo" then "oof" else "rab" end)&\(.name)"

这产生

rab&test_2
rab&test_3
rab&test_1

演示

使用column -ts '&'这将转换为:

rab  test_2
rab  test_3
rab  test_1

我的问题 我需要添加一个自定义的 header 行,这样 output 就变成了:

test&foo&bar
rab&test_2
rab&test_3
rab&test_1

如何添加(静态)一组 header 行有很多问题,例如:

但我无法组合它,所以我可以保持group_by完整并让column处理间距

(我宁愿让column处理间距)


tl;博士;
如何添加自定义 header 数组,例如:

[ "test", "foo", "bar" ] | join("&")

以便

  • group_by及其背后的一切都没有改变
  • column可以解析output

编辑,当然我可以从jq命令中删除column ,然后像这样“滥用” echo显:

ugly=$(curl --silent <URI> \
        | jq -r 'group_by(.type)[][] | "\(if "type" == "foo" then "oof" else "rab" end)&\(.name)"' \
        | egrep --color -E "FooBar|$")
headers="foo#bar#foorbar"
echo "$headers\n$ugly" | column -ts '#' \

但我宁愿保留| column jq部分上的| column ,这样就不需要echo$ugly

将您的表达式括在括号中并添加| ["test&foo&bar"] +. |.[] | ["test&foo&bar"] +. |.[] | ["test&foo&bar"] +. |.[]结尾。

[group_by(.type)[][] | "\(if "type" == "foo" then "oof" else "rab" end)&\(.name)"] | ["test&foo&bar"] + . | .[]

不确定为什么需要columns 似乎您可以将&替换为\t

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM