次の規則に従ってjsonファイルを編集したいと思います。
car0X_hyb.com
文字列の下に名前を生成する必要がありますmazda
(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"
]
}
または(おそらくこれはより良いでしょう)シェルで文字列要素全体を次のように生成してフォーマットしますargjson
。
jq --argjson IDS '['"$(seq -s, -f'"car%02.0f_hyb.com"' 11)"']' '
.mazda |= $IDS
' file.json