roy*_*roy 36 command-line curl json jq
我正在尝试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'
Run Code Online (Sandbox Code Playgroud)
返回
zk0-mycluster.net
zk1-mycluster.net
zk2-mycluster.net
Run Code Online (Sandbox Code Playgroud)
现在我想将这些加入一个字符串中
zk0-mycluster.net,zk1-mycluster.net,zk2-mycluster.net
Run Code Online (Sandbox Code Playgroud)
gle*_*man 87
在做 jq
jq -r '.host_components[].HostRoles.host_name | join(",")'
Run Code Online (Sandbox Code Playgroud)
不,那是错的。这是你需要的:
jq -r '.host_components | map(.HostRoles.host_name) | join(",")'
Run Code Online (Sandbox Code Playgroud)
演示:
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
Run Code Online (Sandbox Code Playgroud)
产出
one,two,three
Run Code Online (Sandbox Code Playgroud)
cuo*_*glm 17
paste
是完成这项工作的最佳工具:
your_command | paste -sd, -
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 17
如果您想要的是 JSON 文档的 CSV 格式输出,那么您可以使用@csv
中的运算符jq
。
somecommand | jq -r '[ .host_components[].HostRoles.host_name ] | @csv'
Run Code Online (Sandbox Code Playgroud)
这使用与问题中使用的相同的表达式来提取所需的数据,但它将所有主机名放入一个数组中。然后传递该数组@csv
,以确保为 CSV 输出正确引用数据。
您期望从中得到以下输出:
"zk0-mycluster.net","zk1-mycluster.net","zk2-mycluster.net"
Run Code Online (Sandbox Code Playgroud)
值中嵌入的任何逗号、双引号或换行符都将按照 CSV 格式文件中的预期正确引用。
归档时间: |
|
查看次数: |
62920 次 |
最近记录: |