首页 > 解决方案 > 如何简化一个jq句子?

问题描述

我有这个文件 test.json

  "items" : [ {
    "name" : "kudu-KUDU_TSERVER-2d63fec551a74320fdcc0c65007c76e4",
    "type" : "KUDU_TSERVER",
    "serviceRef" : {
      "clusterName" : "cluster",
      "serviceName" : "kudu"
    },
    "entityStatus" : "GOOD_HEALTH"
  }, {
    "name" : "kudu-KUDU_MASTER-95ebd4d9a5158d59306372ed306993fe",
    "type" : "KUDU_MASTER",
    "serviceRef" : {
      "clusterName" : "cluster",
      "serviceName" : "kudu"
    },
    "entityStatus" : "GOOD_HEALTH"
  }
... 
]
}

所以我只想要类型为 KUDU_TSERVER 时的名称值

我正在使用这句话

cat test |jq '.items[]' |jq  'select(.type == "KUDU_TSERVER" )' |jq -r '.name'
kudu-KUDU_TSERVER-2d63fec551a74320fdcc0c65007c76e4
kudu-KUDU_TSERVER-2f54da7e700b29f486dc977903077b42
kudu-KUDU_TSERVER-c6eed063790c0ebff3f4c3caa29f35c2
kudu-KUDU_TSERVER-668d476199e24b75dacdc2c142212d7f
kudu-KUDU_TSERVER-b19f608fc0b214334b7cb9aa8911f30d
kudu-KUDU_TSERVER-56aeb0bf37e61755e659be7ee1dd15cb
kudu-KUDU_TSERVER-4b773838c3f005671ea6ab1d77c69ff7

有没有更好的方法来做到这一点?我觉得这个过程没有优化

标签: jsonselectjq

解决方案


您绝对可以进行单个 jq 查询。

cat test | jq -r '.items[] | select(.type == "KUDU_TSERVER" ) | .name'

除此之外,您可以--stream用于大型输入文件。


推荐阅读