我正在运行以下命令:
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"}
我似乎无法在我的输出中加上qoutation标记。
答案 0 :(得分:3)
使用jq
:
sudo clustat | grep primary |
jq -R 'split(" ")|{service:.[0], server:.[1], status:.[2]}'
输入读取为原始文本,而不是JSON。每一行都在一个空格上分开(split
的参数可能需要根据实际输入进行调整)。 jq
确保在构造输出对象时正确引用值。
答案 1 :(得分:1)
不要这样做:相反,使用@chepner's answer,保证生成有效的JSON作为输出和所有可能的输入(如果没有JSON表示,则失败并返回非零退出状态)。
下面只测试生成有问题的特定输入的有效JSON,并且肯定会产生不是有效JSON的输出,其中有许多可能的输入(带有文字引号的字符串,字符串)以字面反斜杠结尾等)。
sudo clustat |
awk '/primary/ {
print "{\"service\":\"" $1 "\",\"server\":\"" $2 "\",\"status\":\""$3"\"}"
}'