Command-Line

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

  • August 5, 2021

我正在嘗試curl一些返回 json 文件的 URL,然後我想從中解析主機並創建一個逗號分隔的字元串。

我有第一部分工作

curl -s -u "admin:admin" -H "X-Requested-By: ambari" "https://hbasecluster.net/api/v1/clusters/mycluster/services/ZOOKEEPER/components/ZOOKEEPER_SERVER" | jq -r '.host_components[].HostRoles.host_name'

返回

zk0-mycluster.net
zk1-mycluster.net
zk2-mycluster.net

現在我想將它們連接成一個字元串,例如

zk0-mycluster.net,zk1-mycluster.net,zk2-mycluster.net

在裡面做jq

jq -r '.host_components[].HostRoles.host_name | join(",")'

不,那是錯誤的。這就是你需要的:

jq -r '.host_components | map(.HostRoles.host_name) | join(",")'

展示:

jq -r '.host_components | map(.HostRoles.host_name) | join(",")' <<DATA
{"host_components":[
 {"HostRoles":{"host_name":"one"}},
 {"HostRoles":{"host_name":"two"}},
 {"HostRoles":{"host_name":"three"}}
]}
DATA

輸出

one,two,three

paste是完成這項工作的最佳工具:

your_command | paste -sd, -

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