다음 규칙에 따라 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