jq将单个字符串值分成两个

问题描述 投票:0回答:1
[
{
  "host": "a.com",
  "ip": "1.2.2.3",
  "port": 8,
  "name":"xyz", 
  "info":"part1    part2    part3    part4"
},
{
  "host": "b.com",
  "ip": "2.5.0.4",
  "port": 3,
  "name":"xyz",
  "info":"part1    part2    part3    part4"
},
{
  "host": "c.com",
  "ip": "9.17.6.7",
  "port": 4,
  "name":"xyz",
   "info":"part1    part2    part3    part4"
}
]

我想以下列格式生成输出:

a.com,1.2.2.3,part1,part
b.com,2.5.0.4,part1,par2
c.com,9.17.6.7,part1,part2

问题是密钥"info“是一个单一的密钥,但我想分开由tab分隔的两条信息。如何做到这一点?

这是我解析文件的jq命令:

cat input.json | jq -r '.[] | "\(.host),\(.ip),\(.info)"' > result.txt
json parsing jq text-parsing string-parsing
1个回答
0
投票

我认为info值由四个空格分隔,而不是由制表符分隔,因为JSON中不允许使用原始制表符,并且当输入中存在无效字符时,jq会引发错误。如果我没错,这个命令应该做你想要的

jq -r '.[] | (.info | split("    ")[0:2] | join(",")) as $info | "\(.host),\(.ip),\($info)"' input.json > result.txt
© www.soinside.com 2019 - 2024. All rights reserved.