
Queremos editar el archivo json de acuerdo con la siguiente regla
Necesitamos generar el nombre car0X_hyb.com
debajo de mazda
la cadena (mientras X es el número de identificación)
Necesitamos actualizar el archivo json en nuestra máquina Linux.
Ejemplo - ID=1
Entonces json será como
{
"toyota": [
"car1.com"
],
"mazda": [
"car01_hyb.com"
],
"ford": [
"car01_eng.com"
]
}
ID=4
, Entonces json será como
{
"toyota": [
"car1.com"
],
"mazda": [
"car01_hyb.com",
"car02_hyb.com",
"car03_hyb.com",
"car04_hyb.com"
],
"ford": [
"car01_eng.com"
]
}
ID=6
, Entonces json será como
{
"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
, Entonces json será como
{
"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"
]
}
Respuesta1
No parece haber una forma nada fea de rellenar con ceros las identificaciones, pero dado
$ jq '.' file.json
{
"toyota": [
"car1.com"
],
"mazda": [
"foo.bar"
],
"ford": [
"car01_eng.com"
]
}
entonces, por ejemplo, para 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"
]
}
O (quizás esto sea mejor) genere y formatee los elementos de cadena completos en el shell y páselo como argjson
:
jq --argjson IDS '['"$(seq -s, -f'"car%02.0f_hyb.com"' 11)"']' '
.mazda |= $IDS
' file.json