jq를 통해 JSON 형식 데이터에서 일부 데이터 가져오기

jq를 통해 JSON 형식 데이터에서 일부 데이터 가져오기

JSON 형식의 샘플 데이터가 있습니다.

[
{
    "info":{
        "disk_num":"2",
        "hostname":"hostA",
        "net":[
            "eth0",
            "eth1"
        ],
        "software":{
            "version":"1.0.0",
            "build_date":"2021-10-08",
            "commit":"bfdaee"
        },
        "kernel":"5.0.0"
    },
    "ip":"10.240.82.192",
    "status":"PASS"
},
{
    "info":{
        "disk_num":"2",
        "hostname":"hostA",
        "net":[
            "eth0",
            "eth1"
        ],
        "software":{
            "version":"1.0.0",
            "build_date":"2021-10-08",
            "commit":"bfdaee"
        },
        "kernel":"5.0.3"
    },
    "ip":"10.240.82.193",
    "status":"PASS"
},
{
    "info":{
        "disk_num":"5",
        "hostname":"hostB",
        "net":[
            "eth0",
            "eth1"
        ],
        "software":{
            "version":"1.0.2",
            "build_date":"2021-10-11",
            "commit":"935678"
        },
        "kernel":"5.0.1"
    },
    "ip":"10.240.82.194",
    "status":"PASS"
}
]

부분 데이터를 가져와서 또 다른 json FORMAT을 구성하고 싶습니다.

[
    {
      "IP": "10.240.82.192",
      "STATUS": "PASS",
      "SOFTWARE": "1.0.0",
      "KERNEL": "5.0.0"
    },
    {
      "IP": "10.240.82.193",
      "STATUS": "PASS",
      "SOFTWARE": "1.0.0",
      "KERNEL": "5.0.3"
    },
    {
      "IP": "10.240.82.194",
      "STATUS": "PASS",
      "SOFTWARE": "1.0.2",
      "KERNEL": "5.0.1"
    }
]

이 명령을 시도했습니다(샘플 데이터를 json.data에 저장했습니다).

cat json.data|jq -r '{IP:.[].ip,STATUS:.[].status,SOFTWARE:.[].info.software.version,KERNEL:.[].info.kernel}'

작동하지 않으며 다음과 같이 출력됩니다.

{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.192",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.193",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.0",
  "KERNEL": "5.0.1"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.0"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.3"
}
{
  "IP": "10.240.82.194",
  "STATUS": "PASS",
  "SOFTWARE": "1.0.2",
  "KERNEL": "5.0.1"
}

내가 원하는 것을 얻기 위한 올바른 cli 명령을 알고 싶습니다.

매우 감사합니다

답변1

지정한 4개 요소 각각에 대해 명령이 각 배열 요소에 대해 반복되므로 3개가 아닌 3 4 = 81개의 개체가 생성됩니다.

각 객체를 반복하려면 map()다음과 같은 함수를 사용할 수 있습니다.

jq 'map({IP:.ip, STATUS:.status, SOFTWARE:.info.software.version, KERNEL:.info.kernel})' json.data

[
  {
    "IP": "10.240.82.192",
    "STATUS": "PASS",
    "SOFTWARE": "1.0.0",
    "KERNEL": "5.0.0"
  },
  {
    "IP": "10.240.82.193",
    "STATUS": "PASS",
    "SOFTWARE": "1.0.0",
    "KERNEL": "5.0.3"
  },
  {
    "IP": "10.240.82.194",
    "STATUS": "PASS",
    "SOFTWARE": "1.0.2",
    "KERNEL": "5.0.1"
  }
]

답변2

@roaima의 답변은 이를 잘 설명하거나 다음과 같이 솔루션을 작성할 수 있습니다.

jq '[ .[] | {IP:.ip, STATUS:.status, SOFTWARE:.info.software.version, KERNEL:.info.kernel} ]' json.data

여기서 .[]부분은 입력의 모든 요소에 대해 반복되는 반면, []전체 결과를 래핑하는 외부 부분은 이를 배열로 변환합니다.

관련 정보