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值转换为