mor*_*s__ 1 linux bash json jq
我尝试使用 jq\nconvert 成功,但没有得到我想要的结果。我试图得到我想要的结果,但这很难。
\njq -Rs '[ split("\\n")[] | select(length > 0) | split(" ") | {group:.[0], instnace: .[1], value: .[2]} ]' input.txt\nRun Code Online (Sandbox Code Playgroud)\n原始txt文件..\n共有从cpu20到46的IP地址和值\xe2\x80\x8b\xe2\x80\x8b
\ncpu20 10.0.20.1 12\ncpu20 10.0.20.1 22\ncpu20 10.0.20.1 13\ncpu20 10.0.20.1 11\ncpu20 10.0.20.1 14\nRun Code Online (Sandbox Code Playgroud)\n....~cpu46
\n这是我尝试的结果。\n输出json
\n{\n "group": "cpu-46",\n "instnace": "10.0.46.94",\n "value": "10"\n },\n {\n "group": "cpu-46",\n "instnace": "10.0.46.95",\n "value": "10"\n },\n {\n "group": "cpu-46",\n "instnace": "10.0.46.96",\n "value": "11"\n },\n {\n "group": "cpu-46",\n "instnace": "10.0.46.97",\n "value": "8"\n },\n {\n "group": "cpu-46",\n "instnace": "10.0.46.98",\n "value": "11"\n },\n {\n "group": "cpu-46",\n "instnace": "10.0.46.99",\n "value": "11"\n },\n {\n "group": "cpu-46",\n "instnace": "10.0.46.100",\n "value": "8"\n }\nRun Code Online (Sandbox Code Playgroud)\n我应该怎么做才能得到如下结果?
\n {\n "CPU20": [\n { "instance": "10.0.20.1", "value": 12 },\n { "instance": "10.0.20.2", "value": 22 },\n { "instance": "10.0.20.3", "value": 13 },\n { "instance": "10.0.20.4", "value": 11 },\n { "instance": "10.0.20.5", "value": 14 }\n ],\n "CPU21": [\n { "instance": "10.0.21.1", "value": 15 },\n { "instance": "10.0.21.2", "value": 24 },\n { "instance": "10.0.21.3", "value": 21 },\n { "instance": "10.0.21.4", "value": 15 },\n { "instance": "10.0.21.5", "value": 16 }\n ],\n "CPU22": [\n { "instance": "10.0.22.1", "value": 12 },\n { "instance": "10.0.22.2", "value": 18 },\n { "instance": "10.0.22.3", "value": 19 },\n { "instance": "10.0.22.4", "value": 12 },\n { "instance": "10.0.22.5", "value": 13 }\n ],\n "CPU23": [\n { "instance": "10.0.20.1", "value": 17 },\n { "instance": "10.0.20.2", "value": 15 },\n { "instance": "10.0.20.3", "value": 21 },\n { "instance": "10.0.20.4", "value": 22 },\n { "instance": "10.0.20.5", "value": 25 }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n
使用group_by和map
jq -Rn '
[inputs | select(. != "") / " "]
| group_by(.[0])
| map({(.[0][0]): map({instance: .[1], value: .[2]})})
| add
'
Run Code Online (Sandbox Code Playgroud)
使用reduce
jq -Rn '
reduce (inputs | select(. != "") / " ") as [$cpu, $instance, $value] ({};
.[$cpu] += [{$instance, $value}]
)
'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
425 次 |
| 最近记录: |