Bru*_*sky 6 membership arrays json jq
在python中,我可以执行以下操作:
>>> 5 in [2,4,6]
False
>>> 5 in [4,5,6]
True
Run Code Online (Sandbox Code Playgroud)
确定给定值是否5存在于列表中。我想在中做同样的概念jq。但是,没有in。这是一个具有更实际数据集的示例,以及如何检查2个值。在我的真正需要中,我必须检查几百个并且不想将所有这些东西or放在一起。
jq '.[] | select(.PrivateIpAddress == "172.31.6.209"
or
.PrivateIpAddress == "172.31.6.229")
| .PrivateDnsName' <<EOF
[
{
"PrivateDnsName": "ip-172-31-6-209.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.209"
},
{
"PrivateDnsName": "ip-172-31-6-219.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.219"
},
{
"PrivateDnsName": "ip-172-31-6-229.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.229"
},
{
"PrivateDnsName": "ip-172-31-6-239.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.239"
}
]
EOF
Run Code Online (Sandbox Code Playgroud)
,我不知道https://stedolan.github.io/jq/manual/v1.5/ 中的哪里有记录。但答案是jq隐含的一对多和多对一处理。
jq '.[] | select(.PrivateIpAddress == ("172.31.6.209",
"172.31.6.229"))
| .PrivateDnsName' <<EOF
[
{
"PrivateDnsName": "ip-172-31-6-209.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.209"
},
{
"PrivateDnsName": "ip-172-31-6-219.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.219"
},
{
"PrivateDnsName": "ip-172-31-6-229.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.229"
},
{
"PrivateDnsName": "ip-172-31-6-239.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.239"
}
]
EOF
Run Code Online (Sandbox Code Playgroud)
(代码的格式/缩进与 OP 的格式/缩进相匹配以简化视觉比较)
输出是:
"ip-172-31-6-209.us-west-2.compute.internal"
"ip-172-31-6-229.us-west-2.compute.internal"
Run Code Online (Sandbox Code Playgroud)
“在我看来就像巫毒教。”
| IN("a","b","c")更新:已经16个月了,终于学会了如何使用该IN功能。这是一个演示,将产生与上述相同的结果。
cat > filter.jq <<EOF
# Either of these work in jq < v1.5, but I've commented them out since I'm using v1.6
# def IN(s): first( if (s == .) then true else empty end ) // false;
# def IN(s): first(select(s == .)) // false;
.[] | select(.PrivateIpAddress | IN("172.31.6.209","172.31.6.229")) | .PrivateDnsName
EOF
jq -f filter.jq <<EOF
[
{
"PrivateDnsName": "ip-172-31-6-209.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.209"
},
{
"PrivateDnsName": "ip-172-31-6-219.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.219"
},
{
"PrivateDnsName": "ip-172-31-6-229.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.229"
},
{
"PrivateDnsName": "ip-172-31-6-239.us-west-2.compute.internal",
"PrivateIpAddress": "172.31.6.239"
}
]
EOF
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1494 次 |
| 最近记录: |