J'essaie de curl
une URL qui renvoie un fichier json, puis je veux en analyser les hôtes et créer une chaîne séparée par des virgules.
Je travaille la première partie
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'
qui revient
zk0-mycluster.net
zk1-mycluster.net
zk2-mycluster.net
Maintenant, je veux les joindre en une seule chaîne comme
zk0-mycluster.net,zk1-mycluster.net,zk2-mycluster.net
Faites-le dans jq
jq -r '.Host_components[].HostRoles.Host_name | join(",")'
Non c'est faux. Voici ce dont vous avez besoin:
jq -r '.Host_components | map(.HostRoles.Host_name) | join(",")'
Démo:
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
les sorties
one,two,three
paste
est le meilleur outil pour faire ce travail:
your_command | paste -sd, -
Si vous souhaitez utiliser awk
, imprimez simplement sans newline
:
<your command> | awk 'NR > 1 { printf(",") } {printf "%s",$0}'