jq过滤器包含未选择的选择

时间:2016-07-15 13:07:15

标签: json csv jq

我正在尝试过滤此JSON output

的标记

通过标签[]进行选择,并在密钥存在时显示所选值。

我的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中做些什么来实现呢?有人可以举个例子吗?

2 个答案:

答案 0 :(得分:0)

不使用select/1,而是使用filter/1,其中:

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

答案 1 :(得分:0)

以下是使用 from_entries 处理.Tags

的解决方案
  .Reservations[]
| .OwnerId as $owner
| .Instances[]
| .InstanceId as $id    
| .Placement.AvailabilityZone as $az
| .Tags
| from_entries
| "\($owner),\($id),\($az),\(.OtherTag//""),\(.Name//"")"