Mesclar saída jq em uma string separada por vírgula [duplicada]

6

Eu estou tentando curl algum URL que retorna um arquivo json, então eu quero analisar seus hosts e criar uma string separada por vírgula.

Eu tenho a primeira parte trabalhando

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'

que retorna

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

Agora eu quero juntar isso em uma string como

zk0-mycluster.net,zk1-mycluster.net,zk2-mycluster.net
    
por user3579198 27.09.2016 / 15:42

3 respostas

18

Faça isso em jq

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

Não, está errado. Isto é o que você precisa:

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

Demo:

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

saídas

one,two,three
    
por 27.09.2016 / 19:20
6

paste é a melhor ferramenta para fazer este trabalho:

your_command | paste -sd, -
    
por 27.09.2016 / 15:58
2

Se você quiser usar awk , apenas imprima sem newline :

    <your command> | awk 'NR > 1 { printf(",") } {printf "%s",$0}'
    
por 27.09.2016 / 15:54