我正在嘗試從命令“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
結果是
{
"Distributor ID:": "Ubuntu"
}
{
"Description:": "Ubuntu 20.04.3 LTS"
}
{
"Release:": "20.04"
}
{
"Codename:": "focal"
}
但我想要結果
[
{
"Distributor ID:": "Ubuntu"
},
{
"Description:": "Ubuntu 20.04.3 LTS"
},
{
"Release:": "20.04"
},
{
"Codename:": "focal"
}
]
任何人都可以幫助我嗎?:)
uj5u.com熱心網友回復:
通常,當我們想從輸入流創建一個陣列時,我們可以使用--slurp/ -s。但是當與--raw-input/結合使用時-R,這會導致整個輸入作為單個字串(包含換行符)提供。
Slurping 也可以使用--null-input/-n和來實作[ inputs | ... ]。這適用于文本檔案。
jq -nR '[ inputs | split("\t") | { (.[0]) : .[1] } ]'
jqplay上的演示
也就是說,我懷疑您會發現以下輸出格式更有用:
{
"Distributor ID": "Ubuntu",
"Description": "Ubuntu 20.04.3 LTS",
"Release": "20.04",
"Codename": "focal"
}
這可以通過簡單地添加來實作| add。
jq -nR '[ inputs | split(":\t") | { (.[0]) : .[1] } ] | add'
jqplay上的演示
一個也可以使用reduce。
jq -nR 'reduce ( inputs | split(":\t") ) as [ $k, $v ] ( {}; . { ($k): $v } )'
jqplay上的演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/418930.html
標籤:
