我正在尝试根据命令“lsb_release”的结果使用 jq 创建一个 JSON 文件
我做了什么 :
if [ -x "$(command -v lsb_release)" ]; then
lsb_release -a | jq --raw-input 'split("\t") | { (.[0]) : .[1] }' > ubuntu_release.json
fi
Run Code Online (Sandbox Code Playgroud)
结果是
{
"Distributor ID:": "Ubuntu"
}
{
"Description:": "Ubuntu 20.04.3 LTS"
}
{
"Release:": "20.04"
}
{
"Codename:": "focal"
}
Run Code Online (Sandbox Code Playgroud)
但我想要结果
[
{
"Distributor ID:": "Ubuntu"
},
{
"Description:": "Ubuntu 20.04.3 LTS"
},
{
"Release:": "20.04"
},
{
"Codename:": "focal"
}
]
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我吗?:)
通常,当我们想从输入流创建数组时,可以使用--slurp/ -s。但是,当与--raw-input/结合使用时-R,这会导致整个输入作为单个字符串(包含换行符)提供。
--null-input还可以使用/-n和来实现吸食[ inputs | ... ]。这对于文本文件来说是理想的。
jq -nR '[ inputs | split("\t") | { (.[0]) : .[1] } ]'
Run Code Online (Sandbox Code Playgroud)
jqplay 上的演示
也就是说,我怀疑您会发现以下输出格式更有用:
{
"Distributor ID": "Ubuntu",
"Description": "Ubuntu 20.04.3 LTS",
"Release": "20.04",
"Codename": "focal"
}
Run Code Online (Sandbox Code Playgroud)
这可以通过简单地添加 来实现| add。
jq -nR '[ inputs | split(":\t") | { (.[0]) : .[1] } ] | add'
Run Code Online (Sandbox Code Playgroud)
jqplay 上的演示
一也可以用reduce。
jq -nR 'reduce ( inputs | split(":\t") ) as [ $k, $v ] ( {}; . + { ($k): $v } )'
Run Code Online (Sandbox Code Playgroud)
jqplay 上的演示
| 归档时间: |
|
| 查看次数: |
3569 次 |
| 最近记录: |