我有一个json文件,内容如下:
{
"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。所以,我想看到所有非正常的服务器状态。所以,我跑:
jq '. | select(.state!="ProfileApplied")'这意味着:
{
"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设备也不感兴趣。如果我将以下内容添加到查询:
jq '. | select(.state!="ProfileApplied") | .name | contains("3par")|not'它给了我:
true
false
true这是正确的,但我确实希望返回json对象来匹配"true“值。有人知道我是怎么做到的吗?
发布于 2022-06-06 14:54:36
你的想法是对的。您需要在select语句中移动第二个条件来添加布尔和逻辑。所有select需要的是一个布尔true/false来进行计算,这取决于内部的任何一组条件。如果条件计算为true,则选择输出对象,否则不会。
select((.state != "ProfileApplied") and (.name | contains("3par") | not))https://stackoverflow.com/questions/72519351
复制相似问题