将表转换为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
]