![将 jq 输出合并为逗号分隔的字符串,例如](https://linux22.com/image/209778/%E5%B0%86%20jq%20%E8%BE%93%E5%87%BA%E5%90%88%E5%B9%B6%E4%B8%BA%E9%80%97%E5%8F%B7%E5%88%86%E9%9A%94%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%8C%E4%BE%8B%E5%A6%82.png)
我有这个输出,想将其转换为类似普罗米修斯的格式金泉。
cat /tmp/wp-plugin.txt | jq .[]
{
"name": "akismet",
"status": "active",
"update": "none",
"version": "5.0"
}
{
"name": "performance-lab",
"status": "active",
"update": "none",
"version": "1.4.0"
}
我的目标是使用 JQ CLI 工具达到这样的效果
wp_plugins{name="akismet",status="active",update="none",version="5.0"}0
wp_plugins{name="performance-lab",status="active",update="active",version="1.4.0"}1
答案1
使用jq
:
jq -r 'to_entries[] | .key as $k | .value | to_entries | map("\(.key)=\(.value|@json)") | "wp_plugins{\(join(","))}\($k)"' file
或者
jq -r 'to_entries[] | .key as $k | .value | to_entries | "wp_plugins{\(map("\(.key)=\(.value|@json)")|join(","))}\($k)"' file
这将获取原始 JSON 文件,并首先使用to_entries
.键将是数组索引,值将是实际对象。
由于我们要创建一个以逗号分隔的键值列表,其中包含不带引号的键和带引号的值,在=
每个键和值之间,我们需要处理.value
(即对象)。我们通过再次传递它to_entries
来获取新的键和值列表来实现这一点。
然后将键和值传递给字符串构造函数,该构造函数以您要查找的格式组成输出,将字符串添加wp_plugins{
到逗号分隔列表的开头,将}
数组索引附加到末尾。
给出问题中的数据(当数据首先放入数组时)的输出:
wp_plugins{name="akismet",status="active",update="none",version="5.0"}0
wp_plugins{name="performance-lab",status="active",update="none",version="1.4.0"}1
更正后的变体,如果键不是,则0
在输出行末尾使用 a ,如果是:update
available
1
available
jq -r '
to_entries[] |
(if .value.update == "available" then 1 else 0 end) as $v |
.value | to_entries |
map("\(.key)=\(.value|@json)") | join(",") |
"wp_plugins{\(.)}\($v)"' file