如何使用jq将字段与通配符匹配?

时间:2018-12-11 10:01:38

标签: json jq

我有以下形式的JSON对象:

{
  "Task11c-0-20181209-12:59:30-65611" : {
    "attributes" : {
      "configname" : "Task11c",
      "datetime" : "20181209-12:59:30",
      "experiment" : "Task11c",
      "inifile" : "lab1.ini",
      "iterationvars" : "",
      "iterationvarsf" : "",
      "measurement" : "",
      "network" : "Manhattan1_1C",
      "processid" : "65611",
      "repetition" : "0",
      "replication" : "#0",
      "resultdir" : "results",
      "runnumber" : "0",
      "seedset" : "0"
    },
    ......
  },
  ......
  "Task11b-12-20181209-13:03:17-65612" : {
    ....
    .... 
  },
  .......
}

我只报告了第一部分,但总的来说,我还有许多其他子对象,它们与诸如Task11c-0-20181209-12:59:30-65611之类的字符串相匹配。它们都有一个共同的首字母Task。我想从每个子对象中提取processid。我正尝试在bash中使用通配符,但似乎不可能。

我也了解了match()函数,但是它适用于字符串而不是json对象。

感谢支持。

1 个答案:

答案 0 :(得分:4)

过滤以Test开头并使用select()表达式仅获取您选择的属性的键

jq 'to_entries[] | select(.key|startswith("Task")).value.attributes.processid' json