Command-Line
將 jq 輸出合併為逗號分隔的字元串,如
我有這個輸出,並希望通過JQ將其轉換為類似 Prometheus 的格式。
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
使用
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