csv jq过滤器以包括未找到的选择

iqxoj9l9  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(130)

我正在尝试筛选此JSON output的标记
通过Tags[]进行选择,如果键存在,则显示所选值。
我的jq过滤器看起来像这样:

jq -r ".Reservations[]
 | [.OwnerId,
    .Instances[].InstanceId,
    .Instances[].Placement.AvailabilityZone,
    (.Instances[].Tags[]?|select(.Key==OtherTag)|.Value),
    (.Instances[].Tags[]?|select(.Key==Name)|.Value) ]
 | @csv"

输出如下

"xxxxxxxxxx9,i-d414ce0b,ap-southeast-2b,webserver2"

我想它包括无根据的选择标签,并填写它作为csv中的空字段,如下所示:

"xxxxxxxxxx9,i-d414ce0b,ap-southeast-2b,,webserver2"

我在jq中应该做些什么来达到这个目的呢?有人能给予我举个例子吗?

mbskvtky

mbskvtky1#

使用filter/1代替select/1,其中:

def filter(f): if f then . else "" end;
wtzytmuj

wtzytmuj2#

以下是使用from_entries处理.Tags的解决方案

.Reservations[]
| .OwnerId as $owner
| .Instances[]
| .InstanceId as $id    
| .Placement.AvailabilityZone as $az
| .Tags
| from_entries
| "\($owner),\($id),\($az),\(.OtherTag//""),\(.Name//"")"
628mspwn

628mspwn3#

您可以使用替代运算子//

jq -r '.Reservations[]
 | [.OwnerId,
    .Instances[].InstanceId,
    .Instances[].Placement.AvailabilityZone,
    (.Instances[].Tags[]?|select(.Key=="OtherTag")|.Value)//"",
    (.Instances[].Tags[]?|select(.Key=="Name")|.Value)//"" ]
| @csv'

输出量:

"683100487279","i-d414ce0b","ap-southeast-2b","","webserver2"

相关问题