如何在jq处理kubectl Pod输出时获取元素索引(类似enumerate)
给kubectl的jq输出添加Pod的数组索引
要在输出中包含Pod在.items数组中的索引,不能直接用.items[]遍历(这种方式会丢失索引信息),可以用to_entries将数组转换为带索引的键值结构,再提取所需字段。
解决命令
针对本地示例文件:
cat output.json | jq '.items | to_entries[] | [.key, .value.metadata.name, .value.spec.containers[].image]'
直接对接kubectl命令:
kubectl get pods -o json | jq '.items | to_entries[] | [.key, .value.metadata.name, .value.spec.containers[].image]'
命令说明
to_entries:将.items数组转换为一组{"key": 索引值, "value": 原Pod对象}的结构,其中.key就是元素在数组中的位置(从0开始计数).value对应原数组中的Pod对象,因此可以通过.value.metadata.name和.value.spec.containers[].image提取原有信息
示例输出
运行上述命令后,针对提供的示例数据会得到:
[ 0, "kubernetes-bootcamp-5485cc6795-4blsd", "gcr.io/google-samples/kubernetes-bootcamp:v1" ] [ 1, "kubernetes-bootcamp-5485cc6795-k824z", "gcr.io/google-samples/kubernetes-bootcamp:v1" ]
索引从1开始的调整
如果希望索引从1开始计数,只需将.key改为.key + 1:
kubectl get pods -o json | jq '.items | to_entries[] | [.key + 1, .value.metadata.name, .value.spec.containers[].image]'
内容的提问来源于stack exchange,提问作者Dan Passaro
相关产品推荐
相关产品推荐

