json 파일에서 속성 태그를 캡처하는 방법

json 파일에서 속성 태그를 캡처하는 방법

다음은 내 json 파일의 간단한 목록입니다.

  "slider-client" : {
    "properties_attributes" : { },
    "properties" : { }
  }
},
{
  "spark2-hive-site-override" : {
    "properties_attributes" : { },
    "properties" : {
      "hive.metastore.client.connect.retry.delay" : "5",
      "hive.server2.enable.doAs" : "false",
      "hive.server2.thrift.port" : "10016",
      "hive.server2.transport.mode" : "binary",
      "hive.metastore.client.socket.timeout" : "1800"
    }
  }
},
{
  "tez-env" : {
    "properties_attributes" : { },
    "properties" : {
      "heap_dump_location" : "/tmp",
      "content" : "\n# Tez specific configuration\nexport TEZ_CONF_DIR={{config_dir}}\n\n# Set HADOOP_HOME to point to a specific hadoop install directory\nexport HADOOP_HOME=${HADOOP_HOME:-{{hadoop_home}}}\n\n# The java implementation to use.\nexport JAVA_HOME={{java64_home}}",
      "enable_heap_dump" : "false",
      "tez_user" : "tez"
    }
  }
},

다음으로 시작하는 줄만 캡처하려면 어떻게 해야 합니까?

"properties" : {

그리고 끝나는

 }

예상 출력의 예

    "properties" : { }
    "properties" : {
      "hive.metastore.client.connect.retry.delay" : "5",
      "hive.server2.enable.doAs" : "false",
      "hive.server2.thrift.port" : "10016",
      "hive.server2.transport.mode" : "binary",
      "hive.metastore.client.socket.timeout" : "1800"
    }

    "properties" : {
      "heap_dump_location" : "/tmp",
      "content" : "\n# Tez specific configuration\nexport TEZ_CONF_DIR={{config_dir}}\n\n# Set HADOOP_HOME to point to a specific hadoop install directory\nexport HADOOP_HOME=${HADOOP_HOME:-{{hadoop_home}}}\n\n# The java implementation to use.\nexport JAVA_HOME={{java64_home}}",
      "enable_heap_dump" : "false",
      "tez_user" : "tez"
    }

지금까지 내가 한 것은 이 구문입니다. 이것이 최선의 방법입니까?

 awk '/"properties" : {/,/^[[:blank:]]*}$/'  file.json

답변1

유효한 JSON이 되려면 입력이 개체 배열로 처리되어야 합니다.

해결책:

jq '.[] | to_entries[] | .value | if has("properties") then {"properties": .properties} else empty end' yourfile

출력(수정됨):

{
  "properties": {}
}
{
  "properties": {
    "hive.metastore.client.connect.retry.delay": "5",
    "hive.server2.enable.doAs": "false",
    "hive.server2.thrift.port": "10016",
    "hive.server2.transport.mode": "binary",
    "hive.metastore.client.socket.timeout": "1800"
  }
}
{
  "properties": {
    "heap_dump_location": "/tmp",
    "content": "\n# Tez specific configuration\nexport TEZ_CONF_DIR={{config_dir}}\n\n# Set HADOOP_HOME to point to a specific hadoop install directory\nexport HADOOP_HOME=${HADOOP_HOME:-{{hadoop_home}}}\n\n# The java implementation to use.\nexport JAVA_HOME={{java64_home}}",
    "enable_heap_dump": "false",
    "tez_user": "tez"
  }
}

답변2

"}" 이전의 속성을 캡처하려면 다음을 수행할 수 있습니다.

awk '/"properties" : {/,/^[[:blank:]]*}$/'  file.json

관련 정보