私たちは次のようなものを持っていますjson
(example 1
)
実施例1
more file.json
{
"version": 1,
"partitions": [
{
"topic": "list_of_cars",
"partition": 2,
"replicas": [
1003,
1004,
1005
],
"log_dirs": [
"any",
"any",
"any"
]
},
{
"topic": "list_of_cars",
"partition": 4,
"replicas": [
1005,
1006,
1001
],
"log_dirs": [
"any",
"any",
"any"
]
},
{
"topic": "list_of_cars",
"partition": 0,
"replicas": [
1001,
1002,
1003
],
"log_dirs": [
"any",
"any",
"any"
]
},
{
"topic": "list_of_cars",
"partition": 1,
"replicas": [
1002,
1003,
1004
],
"log_dirs": [
"any",
"any",
"any"
]
},
{
"topic": "list_of_cars",
"partition": 5,
"replicas": [
1006,
1001,
1002
],
"log_dirs": [
"any",
"any",
"any"
]
},
{
"topic": "list_of_cars",
"partition": 3,
"replicas": [
1004,
1005,
1006
],
"log_dirs": [
"any",
"any",
"any"
]
}
]
}
topic
(例1)で各配列を切り取りたいと思います。
file1.json file2.json file3.json ..
下の図のようにjsonファイルにリダイレクトします。
最初のファイル
more file1.json
{
"version": 1,
"partitions": [{
"topic": "list_of_cars",
"partition": 2,
"replicas": [
1003,
1004,
1005
],
"log_dirs": [
"any",
"any",
"any"
]
}]
}
2番目のファイル
more file2.json
{
"version": 1,
"partitions": [{
"topic": "list_of_cars",
"partition": 4,
"replicas": [
1005,
1006,
1001
],
"log_dirs": [
"any",
"any",
"any"
]
}]
}
3番目のファイル
more file3.json
.
.
.
ベストアンサー1
特定の区画の識別子が保管されているように見えるので、区画を繰り返すことで、.partition[].partition
各識別子に対してその特定の識別子を持たない区画を除去することができます。
以下は、識別子が空白などのない単純な整数であると仮定します。
for part in $(jq '.partitions[].partition' file.json); do
jq --argjson part "$part" 'del(.partitions[] | select( .partition != $part ))' file.json >file-partition-"$part".json
done
これにより、配列のインデックスではなくパーティション名が付けられた各パーティションのファイルが作成されます.partition[]
。