Command-Line

將 jq 輸出合併為逗號分隔的字元串,如

  • August 24, 2022

我有這個輸出,並希望通過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

引用自:https://unix.stackexchange.com/questions/714702