首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jq筛选器以添加多个条件以选择语句

jq筛选器以添加多个条件以选择语句
EN

Stack Overflow用户
提问于 2022-06-06 14:42:42
回答 1查看 262关注 0票数 1

我有一个json文件,内容如下:

代码语言:javascript
复制
{
    "name": "pp-site1-r1-n2",
    "state": "Monitored",
    "stateReason": "NotApplicable"
}
{
    "name": "bb-site2-3par-ilo",
    "state": "Monitored",
    "stateReason": "NotApplicable"
}
{
    "name": "tm-site1-r3-n4-ilo",
    "state": "ProfileError",
    "stateReason": "NotApplicable"
}
{
    "name": "tm-site3-r1-n6-ilo",
    "state": "ProfileApplied",
    "stateReason": "NotApplicable"
}

服务器的正常状态是ProfileApplied。所以,我想看到所有非正常的服务器状态。所以,我跑:

代码语言:javascript
复制
jq '. | select(.state!="ProfileApplied")'

这意味着:

代码语言:javascript
复制
{
  "name": "pp-site1-r1-n2",
  "state": "Monitored",
  "stateReason": "NotApplicable"
}
{
  "name": "bb-site2-3par-ilo",
  "state": "Monitored",
  "stateReason": "NotApplicable"
}
{
  "name": "tm-site1-r3-n4-ilo",
  "state": "ProfileError",
  "stateReason": "NotApplicable"
}

这很好。但是,我对3par设备也不感兴趣。如果我将以下内容添加到查询:

代码语言:javascript
复制
jq '. | select(.state!="ProfileApplied") | .name | contains("3par")|not'

它给了我:

代码语言:javascript
复制
true
false
true

这是正确的,但我确实希望返回json对象来匹配"true“值。有人知道我是怎么做到的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-06 14:54:36

你的想法是对的。您需要在select语句中移动第二个条件来添加布尔和逻辑。所有select需要的是一个布尔true/false来进行计算,这取决于内部的任何一组条件。如果条件计算为true,则选择输出对象,否则不会。

代码语言:javascript
复制
select((.state != "ProfileApplied") and (.name | contains("3par") | not))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72519351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档