단일 json 파일을 여러 json 파일로 분리하는 방법

단일 json 파일을 여러 json 파일로 분리하는 방법

우리는 다음과 같은 것을 가지고 있습니다 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"
       ]
   }]
}

두 번째 파일

 more file2.json

{
    "version": 1,
     "partitions": [{
        "topic": "list_of_cars",
        "partition": 4,
        "replicas": [
               1005,
               1006,
               1001
                ],
                "log_dirs": [
                 "any",
                 "any",
                 "any"
       ]
   }]
}

세 번째 파일

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[].

관련 정보