如何使用JQ创建特定结果(jq parse json)

How to create a specific result using JQ (jq parse json)

我有大量这样的:

2254003131908096 39480500160 39763833120
2296334329577472 36713833920 37747166400
2297708719112192 39830499360 41430500640

我应该使用哪个 JQ 命令来获得这样的结果:

"2254003131908096": {
  {
    "exchange": "39480500160",
    "replication": "39763833120"
  }
}
    
"2296334329577472": {
  {
    "exchange": "36713833920",
    "replication": "39763833120"
  }
}
  
"2297708719112192": {  
  {
    "exchange": "39830499360",
    "replication": "41430500640"
  }
}

请帮帮我。

您的示例输出无效 JSON。我假设您想要一个对象,每个输入行有一个字段。

使用 -R 读取原始文本,然后使用 / 拆分 space,并通过设置相应的字段将所有输入减少到一个对象。

jq -Rn '
  [inputs / " "] | reduce .[] as $line ({};
    .[$line[0]] = {exchange: $line[1], replication: $line[2]}
  )
'
{
  "2254003131908096": {
    "exchange": "39480500160",
    "replication": "39763833120"
  },
  "2296334329577472": {
    "exchange": "36713833920",
    "replication": "37747166400"
  },
  "2297708719112192": {
    "exchange": "39830499360",
    "replication": "41430500640"
  }
}

Demo

您可以使用 reduce.

过滤器

reduce (inputs / " " ) as [$k,$e,$r] ({}; .+{($k):{exchange:$e,replication:$r}})

输入

2254003131908096 39480500160 39763833120
2296334329577472 36713833920 37747166400
2297708719112192 39830499360 41430500640

输出

{
  "2254003131908096": {
    "exchange": "39480500160",
    "replication": "39763833120"
  },
  "2296334329577472": {
    "exchange": "36713833920",
    "replication": "37747166400"
  },
  "2297708719112192": {
    "exchange": "39830499360",
    "replication": "41430500640"
  }
}

演示

https://jqplay.org/s/9uugFhWQtt