我們要根據以下規則編輯json文件
我們需要產生 name car0X_hyb.com
-undermazda
字串(而 X 是 ID 號碼)
我們需要更新 Linux 機器上的 json 文件
例子 - ID=1
那麼 json 將是
{
"toyota": [
"car1.com"
],
"mazda": [
"car01_hyb.com"
],
"ford": [
"car01_eng.com"
]
}
ID=4
, 那麼 json 將是
{
"toyota": [
"car1.com"
],
"mazda": [
"car01_hyb.com",
"car02_hyb.com",
"car03_hyb.com",
"car04_hyb.com"
],
"ford": [
"car01_eng.com"
]
}
ID=6
, 那麼 json 將是
{
"toyota": [
"car1.com"
],
"mazda": [
"car01_hyb.com",
"car02_hyb.com",
"car03_hyb.com",
"car04_hyb.com",
"car05_hyb.com",
"car06_hyb.com"
],
"ford": [
"car01_eng.com"
]
}
ID=10
, 那麼 json 將是
{
"toyota": [
"car1.com"
],
"mazda": [
"car01_hyb.com",
"car02_hyb.com",
"car03_hyb.com",
"car04_hyb.com",
"car05_hyb.com",
"car06_hyb.com",
"car07_hyb.com",
"car08_hyb.com",
"car09_hyb.com",
"car10_hyb.com"
],
"ford": [
"car01_eng.com"
]
}
答案1
似乎沒有一種不醜陋的方法來對 ID 進行零填充,但是考慮到
$ jq '.' file.json
{
"toyota": [
"car1.com"
],
"mazda": [
"foo.bar"
],
"ford": [
"car01_eng.com"
]
}
然後例如對於ID
= 11
:
$ jq --arg ID 11 '
.mazda |= [range(1;($ID | tonumber)+1) as $ID | if $ID < 10 then "car0\($ID)_hyb.com" else "car\($ID)_hyb.com" end]
' file.json
{
"toyota": [
"car1.com"
],
"mazda": [
"car01_hyb.com",
"car02_hyb.com",
"car03_hyb.com",
"car04_hyb.com",
"car05_hyb.com",
"car06_hyb.com",
"car07_hyb.com",
"car08_hyb.com",
"car09_hyb.com",
"car10_hyb.com",
"car11_hyb.com"
],
"ford": [
"car01_eng.com"
]
}
或者(也許這更好)在 shell 中生成並格式化完整的字串元素,並將其作為argjson
:
jq --argjson IDS '['"$(seq -s, -f'"car%02.0f_hyb.com"' 11)"']' '
.mazda |= $IDS
' file.json