【发布时间】:2017-02-04 01:24:14
【问题描述】:
我正在运行以下命令:
sudo clustat | grep primary | awk 'NF{print $1",""server:"$2 ",""status:"$3}'
结果是:
service:servicename,server:servername,status:started
service:servicename,server:servername,status:started
service:servicename,server:servername,status:started
service:servicename,server:servername,status:started
service:servicename,server:servername,status:started
我想要的结果是:
{"service":"servicename","server":"servername","status":"started"}
{"service":"servicename","server":"servername","status":"started"}
{"service":"servicename","server":"servername","status":"started"}
{"service":"servicename","server":"servername","status":"started"}
{"service":"servicename","server":"servername","status":"started"}
如果我们搞砸了我的输出,我似乎无法加上引号。
【问题讨论】:
-
您能否举一个
clustat输出的示例,以便人们可以用一种可能不同的语言编写和测试您的 awk 脚本的替代品? -
(添加文字引号很容易,但处理正确 JSON 引用的所有其他方面 - 将
"更改为\",或将任何文字反斜杠本身加倍,等等是另一回事;稳健的方法是使用支持原生 JSON 生成的语言)。 -
仅供参考,
awk /primary/ { ... }会将grep primary的效果合并到您的awk脚本中。 -
...不是,要清楚,我建议使用 awk 来完成这项工作——
jq是非常合适的工具。 -
这是没有我的附加组件的输出: service:servicename servername started service:servicename servername started service:servicename servername started service:servicename servername started service:servicename servername started