从JSON数组中选择最高版本值

时间:2020-10-09 20:19:06

标签: bash shell jq

我有一个JSON结果,我需要搜索一个特定值并从数组中获取。

例如,这是我的JSON,我需要在1.15数组中搜索具有更高补丁程序版本的版本validNodeVersions。因此,在这里我想检索值1.15.12-gke.20,这是数组列表的最高1.15版本。有人可以帮忙吗?

基本上,我一直在寻找任何版本的最高修补程序版本。 1.151.15.12-gke.20

gcloud container get-server-config --format json

{
  "channels": [
    {
      "channel": "REGULAR",
      "defaultVersion": "1.17.9-gke.1504",
      "validVersions": [
        "1.17.9-gke.6300",
        "1.17.9-gke.1504"
      ]
    },
    {
      "channel": "STABLE",
      "defaultVersion": "1.16.13-gke.401",
      "validVersions": [
        "1.16.13-gke.401",
        "1.15.12-gke.20"
      ]
    }
  ],
  "defaultClusterVersion": "1.16.13-gke.401",
  "defaultImageType": "COS",
  "validImageTypes": [
    "UBUNTU",
    "UBUNTU_CONTAINERD"
  ],
  "validMasterVersions": [
    "1.17.12-gke.500",
    "1.14.10-gke.50"
  ],
  "validNodeVersions": [
    "1.17.12-gke.500",
    "1.16.8-gke.12",
    "1.15.12-gke.20",
    "1.15.12-gke.17",
    "1.15.12-gke.16",
    "1.15.12-gke.13",
    "1.15.12-gke.9",
    "1.15.12-gke.6",
    "1.15.12-gke.3",
    "1.15.12-gke.2",
    "1.15.11-gke.17",
    "1.15.11-gke.15",
    "1.15.11-gke.13",
    "1.15.11-gke.12",
    "1.15.11-gke.11",
    "1.15.11-gke.9",
    "1.15.11-gke.5",
    "1.15.11-gke.3",
    "1.15.11-gke.1",
    "1.15.9-gke.26",
    "1.15.8-gke.3",
    "1.15.7-gke.23",
    "1.15.4-gke.22",
    "1.14.10-gke.0",
    "1.14.9-gke.0"
  ]
}

1 个答案:

答案 0 :(得分:0)

匹配正则表达式,排序或library(matrixStats) m1 <- rowRanges(sampleSpace) out <- sampleSpace[(m1[,2]- m1[,1]) <= 10,] 中的任何内容都比较棘手。 GNU jq命令有一个很好的参数sort,它表示版本排序,因此这是一种简单的方法,也无需将awk或排序拆分成多个字段或类似内容。

-V

jq -r '.validNodeVersions[]' file.json | grep "^1\.15" | sort -V | tail -1 1.15.12-gke.20 在这里简单地选择值,jq按版本过滤这些值,按版本排序后,我们得到最高的值。