jq学习中


jq命令的使用

筛选一个数据并过滤掉空值(处理一次)后为其拼接字符串 (前缀)

aws ecr list-images --repository-name felixreponame|jq -r '.[]|map(select(.imageTag != null and .imageTag != ""))|map("felixreponame:" + .imageTag)'

[
  "felixreponame:csi-node-driver-registrarv2.7.0",
  "felixreponame:csi-node-driver-registrarv1.3.0",
  "felixreponame:testpushlatest",
  "felixreponame:felixreponametestpush",
  "felixreponame:testpush"
]

另一个方便的写法
aws ecr list-images --repository-name felixecr|jq -r '.[]|map("felixecr:" + (select(.imageTag != null)|.imageTag)|tostring )' |head -5
[
  "felixecr:csi-node-driver-registrarv2.7.0",
  "felixecr:csi-node-driver-registrarv1.3.0",
  "felixecr:testpushlatest",
  "felixecr:felixecrtestpush",

小坑,,,一直尝试join,但是其实在jq里 只是一个把数组拼接的命令
join()是jq内置的一个字符串拼接函数,用于将数组元素按照指定的分隔符拼接为一个字符串。以下是join()函数的使用方法:

join(separator)

其中,separator表示分隔符,可以是任意字符串。join()函数将数组中的所有元素按照分隔符进行拼接,并返回一个新的字符串。例如,以下jq表达式将一个数组中的元素拼接为一个以逗号分隔的字符串:

["foo", "bar", "baz"] | join(",")

输出结果为:

"foo,bar,baz"

在使用join()函数时,需要注意的是,该函数只能用于数组类型的数据,不能用于字符串类型的数据。如果要将一个字符串按照指定分隔符拆分为数组,可以使用split()函数。

以下是一个示例,用于将一个以空格分隔的字符串拆分为数组,并将数组元素拼接为一个以逗号分隔的字符串:

"foo bar baz" | split(" ") | join(",")

输出结果为:

"foo,bar,baz"

需要注意的是,在使用join()函数时,如果数组中包含空字符串或null值,这些值将被忽略并不会出现在拼接后的字符串中。如果需要保留这些值,可以使用map()函数将它们转换为特定的字符串或标记,然后再使用join()函数进行拼接。

例如,以下示例用于将一个数组中的元素拼接为一个以逗号分隔的字符串,并在空字符串和null值处插入标记

json

echo ["foo", "", "bar", null, "baz"] | map(if . == "" or . == null then "<empty>" else . end) | join(",")

输出结果为:

"foo,<empty>,bar,<empty>,baz"

上述示例使用了map()函数,将空字符串和null值转换为标记,然后使用join()函数将所有元素拼接为一个字符串。


文章作者: Felix Li
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Felix Li !
  目录