如何用jq从JSON文件提取指定Tag值及关联存储卷属性?
解决方法:提取EBS卷名称并格式化输出表格
嘿,我明白你的问题了——你之前的jq命令之所以没得到预期结果,是因为Tags数组里Name标签的位置不是固定的第一个,有的Volume里它排在第二个,直接取[0]当然会拿到错误的值!
正确的jq命令
要准确提取Key为Name的标签值,同时输出你想要的“Name值 Size VolumeType”格式,用这条命令就可以:
jq -r '.Volumes[] | (.Tags[] | select(.Key == "Name").Value) + " " + (.Size|tostring) + " " + .VolumeType' your-json-file.json
命令拆解
.Volumes[]:遍历JSON里的每一个Volume对象(.Tags[] | select(.Key == "Name").Value):在当前Volume的所有标签里,筛选出Key等于Name的项,取出它的Value(这一步不管Name标签在数组里的位置,都能准确找到)+ " " + (.Size|tostring):把数字类型的Size转换成字符串,和名称用空格拼接+ " " + .VolumeType:最后拼接上VolumeType字段
更规整的对齐表格
如果想让输出的表格更整齐(自动对齐各列),可以配合column命令:
jq -r '.Volumes[] | (.Tags[] | select(.Key == "Name").Value) + "\t" + (.Size|tostring) + "\t" + .VolumeType' your-json-file.json | column -t
用这个命令处理你提供的JSON,输出结果就是:
kubernetes-dynamic-pvc-claim1 100 io1 kubernetes-dynamic-pvc-claim2 200 gp2
内容的提问来源于stack exchange,提问作者Webair
相关产品推荐
相关产品推荐

