将表转换为JSON,忽略重复的标题行
我有一个卡夫卡命令,它将以下面的格式输出将表转换为JSON,忽略重复的标题行,json,apache-kafka,jq,Json,Apache Kafka,Jq,我有一个卡夫卡命令,它将以下面的格式输出 GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID connect-mm-leads-m
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
connect-mm-leads-mapture-map DEV.mmvm.V2 0 9 9 0 connector-consumer-mm-leads-mapture-map-0-296b0e23-0995-4220-b493-fb006f41760a /10.00.000.00 connector-consumer-mm-leads-mapture-map-0
connect-mm-leads-mapture-map DEV.mmLeads.V1 1 7 7 0 connector-consumer-mm-leads-mapture-map-0-296b0e23-0995-4220-b493-fb006f41760a /10.01.01.01 connector-consumer-mm-leads-mapture-map-0
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
connect-ccc-7562w DEV3.MMAutoshipTemplates.V1 0 594013 594021 8 connector-consumer-kkk-34ff-0-dfsfdsf-dsfd-1 /10.01.01.02 connector-consumer-ccc-7562w-0
connect-ccc-7562w DEV3.MMProducts.V1 0 4884 4885 1 connector-consumer-kkk-234f-2444vf-2-s-dsffdd-11 /10.01.01.03 connector-consumer-ccc-7562w-0
connect-kkk-7562w DEV3.mmLeads.V1
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
_company-centerpart-0-command _company-command 0 20 20 0 _company-centerpart-0-command-0d76f6e2-7ff3-47fa-a63c-0f36aedda046-StreamThread-1-consumer-66e0cc27-469e-4735-80cf-c930f27f6e5e /10.01.01.04 _company-centerpart-0-command-0d76f6e2-7ff3-47fa-a63c-0f36aedda046-StreamThread-1-consumer
但是我想要Json格式的输出,内容应该如下所示
所需输出应为:
[
{
"GROUP": "connect-mm-leads-mapture-map",
"TOPIC": "DEV.mmvm.V2",
"PARTITION": "0",
"CURRENT-OFFSET": "9",
"LOG-END-OFFSET": "9",
"LAG": "0",
"CONSUMER-ID": "connector-consumer-mm-leads-mapture-map-0-296b0e23-0995-4220-b493-fb006f41760a",
"HOST": "/10.00.000.00",
"CLIENT-ID": "connector-consumer-mm-leads-mapture-map-0"
},
{
"GROUP": "connect-mm-leads-mapture-map",
"TOPIC": "DEV.mmLeads.V1",
"PARTITION": "1",
"CURRENT-OFFSET": "7",
"LOG-END-OFFSET": "7",
"LAG": "0",
"CONSUMER-ID": "connector-consumer-mm-leads-mapture-map-0-296b0e23-0995-4220-b493-fb006f41760a",
"HOST": "/10.01.01.01",
"CLIENT-ID": "connector-consumer-mm-leads-mapture-map-0"
},
{
"GROUP": "connect-ccc-7562w",
"TOPIC": "DEV3.MMAutoshipTemplates.V1",
"PARTITION": "0",
"CURRENT-OFFSET": "594013",
"LOG-END-OFFSET": "594021",
"LAG": "8",
"CONSUMER-ID": "connector-consumer-kkk-34ff-0-dfsfdsf-dsfd-1",
"HOST": "/10.01.01.02",
"CLIENT-ID": "connector-consumer-ccc-7562w-0"
},
{
"GROUP": "connect-ccc-7562w",
"TOPIC": "DEV3.MMProducts.V1",
"PARTITION": "0",
"CURRENT-OFFSET": "4884",
"LOG-END-OFFSET": "4885",
"LAG": "1",
"CONSUMER-ID": "connector-consumer-kkk-234f-2444vf-2-s-dsffdd-11",
"HOST": "/10.01.01.03",
"CLIENT-ID": "connector-consumer-ccc-7562w-0"
},
{
"GROUP": "connect-kkk-7562w",
"TOPIC": "DEV3.mmLeads.V1",
"PARTITION": "",
"CURRENT-OFFSET": "",
"LOG-END-OFFSET": "",
"LAG": "",
"CONSUMER-ID": "",
"HOST": "",
"CLIENT-ID": ""
},
{
"GROUP": "_company-centerpart-0-command",
"TOPIC": "_company-command",
"PARTITION": "0",
"CURRENT-OFFSET": "20",
"LOG-END-OFFSET": "20",
"LAG": "0",
"CONSUMER-ID": "_company-centerpart-0-command-0d76f6e2-7ff3-47fa-a63c-0f36aedda046-StreamThread-1-consumer-66e0cc27-469e-4735-80cf-c930f27f6e5e",
"HOST": "/10.01.01.04",
"CLIENT-ID": "_company-centerpart-0-command-0d76f6e2-7ff3-47fa-a63c-0f36aedda046-StreamThread-1-consumer"
}
]
我正在使用下面的命令,并且能够转换成预期的json,其中包含一些附加的无意义的数据
命令:
./kafka-consumer-groups.sh --bootstrap-server "xxxxxxx:9092" --command-config /root/config.properties --describe --all-groups| jq -sR '[sub("\n$";"") | splits("\n") | sub("^ +";"") | [splits(" +")]] | .[1] as $header | .[2:] | [.[] | [. as $x | range($header | length) | {"key": $header[.], "value": $x[.]}] | from_entries]'
命令输出:
[
{
"GROUP": "connect-mm-leads-mapture-map",
"TOPIC": "DEV.mmvm.V2",
"PARTITION": "0",
"CURRENT-OFFSET": "9",
"LOG-END-OFFSET": "9",
"LAG": "0",
"CONSUMER-ID": "connector-consumer-mm-leads-mapture-map-0-296b0e23-0995-4220-b493-fb006f41760a",
"HOST": "/10.00.000.00",
"CLIENT-ID": "connector-consumer-mm-leads-mapture-map-0"
},
{
"GROUP": "connect-mm-leads-mapture-map",
"TOPIC": "DEV.mmLeads.V1",
"PARTITION": "1",
"CURRENT-OFFSET": "7",
"LOG-END-OFFSET": "7",
"LAG": "0",
"CONSUMER-ID": "connector-consumer-mm-leads-mapture-map-0-296b0e23-0995-4220-b493-fb006f41760a",
"HOST": "/10.01.01.01",
"CLIENT-ID": "connector-consumer-mm-leads-mapture-map-0"
},
{
"GROUP": "GROUP",
"TOPIC": "TOPIC",
"PARTITION": "PARTITION",
"CURRENT-OFFSET": "CURRENT-OFFSET",
"LOG-END-OFFSET": "LOG-END-OFFSET",
"LAG": "LAG",
"CONSUMER-ID": "CONSUMER-ID",
"HOST": "HOST",
"CLIENT-ID": "CLIENT-ID"
},
{
"GROUP": "connect-ccc-7562w",
"TOPIC": "DEV3.MMAutoshipTemplates.V1",
"PARTITION": "0",
"CURRENT-OFFSET": "594013",
"LOG-END-OFFSET": "594021",
"LAG": "8",
"CONSUMER-ID": "connector-consumer-kkk-34ff-0-dfsfdsf-dsfd-1",
"HOST": "/10.01.01.02",
"CLIENT-ID": "connector-consumer-ccc-7562w-0"
},
{
"GROUP": "connect-ccc-7562w",
"TOPIC": "DEV3.MMProducts.V1",
"PARTITION": "0",
"CURRENT-OFFSET": "4884",
"LOG-END-OFFSET": "4885",
"LAG": "1",
"CONSUMER-ID": "connector-consumer-kkk-234f-2444vf-2-s-dsffdd-11",
"HOST": "/10.01.01.03",
"CLIENT-ID": "connector-consumer-ccc-7562w-0"
},
{
"GROUP": "connect-kkk-7562w",
"TOPIC": "DEV3.mmLeads.V1",
"PARTITION": "",
"CURRENT-OFFSET": "",
"LOG-END-OFFSET": "",
"LAG": "",
"CONSUMER-ID": "",
"HOST": "",
"CLIENT-ID": ""
},
{
"GROUP": "GROUP",
"TOPIC": "TOPIC",
"PARTITION": "PARTITION",
"CURRENT-OFFSET": "CURRENT-OFFSET",
"LOG-END-OFFSET": "LOG-END-OFFSET",
"LAG": "LAG",
"CONSUMER-ID": "CONSUMER-ID",
"HOST": "HOST",
"CLIENT-ID": "CLIENT-ID"
},
{
"GROUP": "_company-centerpart-0-command",
"TOPIC": "_company-command",
"PARTITION": "0",
"CURRENT-OFFSET": "20",
"LOG-END-OFFSET": "20",
"LAG": "0",
"CONSUMER-ID": "_company-centerpart-0-command-0d76f6e2-7ff3-47fa-a63c-0f36aedda046-StreamThread-1-consumer-66e0cc27-469e-4735-80cf-c930f27f6e5e",
"HOST": "/10.01.01.04",
"CLIENT-ID": "_company-centerpart-0-command-0d76f6e2-7ff3-47fa-a63c-0f36aedda046-StreamThread-1-consumer"
}
]
如下所示,意味着应删除的(不需要的)输出更少:
{
"GROUP": "GROUP",
"TOPIC": "TOPIC",
"PARTITION": "PARTITION",
"CURRENT-OFFSET": "CURRENT-OFFSET",
"LOG-END-OFFSET": "LOG-END-OFFSET",
"LAG": "LAG",
"CONSUMER-ID": "CONSUMER-ID",
"HOST": "HOST",
"CLIENT-ID": "CLIENT-ID"
},
注意:命令输出可能有许多行
谢谢。要将两个数组的对应元素配对,并用它们构造一个对象,我们将
转置
内置与添加
结合使用
而且,将原始输入转换成一个巨大的JSON脚本通常是不必要的,更不用说这种做法有多么糟糕了
给定命令行上的--null input
和--raw input
选项,此JQ程序将生成预期输出:
[ input | splits(" +") ] as $header | [
inputs
| [ splits(" +") ]
| select(. != $header)
| [ $header, . ]
| [ transpose[] | { (.[0]): .[1] } ]
| add
]