web-dev-qa-db-ja.com

jq出力をコンマ区切りの文字列にマージします

Jsonファイルを返すURLをcurlしようとしています。そのホストを解析して、コンマ区切りの文字列を作成します。

私は最初の部分が働いています

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

今私はこれらを1つの文字列に結合したいです

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

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
45
glenn jackman

pasteは、この作業を行うのに最適なツールです。

your_command | paste -sd, -
11
cuonglm

awkを使用する場合は、newlineなしで印刷します。

    <your command> | awk 'NR > 1 { printf(",") } {printf "%s",$0}'
2
Echoes_86