arrays - jq:选择 .attribute 在列表中的位置
问题描述
在python中我可以这样做:
>>> 5 in [2,4,6]
False
>>> 5 in [4,5,6]
True
确定给定值是否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
解决方案
使用,
我不知道在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
(代码的格式/缩进与 OP 相匹配,以简化视觉比较)
输出是:
"ip-172-31-6-209.us-west-2.compute.internal"
"ip-172-31-6-229.us-west-2.compute.internal"
“对我来说,这就像巫术。”
使用| 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
推荐阅读
- php - 如何在 PHP 中从数据库动态创建 switch 案例?
- java - 手动添加 NodeEntity、Id、GeneratedValue、RelationshipEntity 等(不使用注释)
- android - Android Drawable Importer 插件在 Android Studio 3.6 中不起作用
- asp.net-core - 在 JWT 令牌中传递租户 ID 是一种好习惯吗?
- flutter - Flutter Card vs Container Widget
- c - 如何从 C 中的宏之类的函数中仅提取已定义函数的名称?
- node.js - 如何访问在不同容器上运行的两个快速服务器之间的不同端点
- swift - 在 init() 构造函数中初始化的带有 @State 的 SwiftUI 视图
- android - 无法在 android studio 3.6 中进行 git pull
- android - 适用于 Android 和 iOS 的应用内购买撤销机制