我想以 json 形式获得以下小型 shell 脚本的输出。
#!/bin/bash
top -b -d1 -n1 | grep Cpu
输出:
Cpu(s): 6.2%us, 1.6%sy, 0.2%ni, 90.9%id, 1.1%wa, 0.0%hi, 0.0%si, 0.0%st
所需输出:
{"Cpu": "6.3" }
如何以 json 形式转换每个 shell 脚本的输出?
你可以试试这个
echo "{\"Cpu\":\"`top -b -d1 -n1 | grep Cpu | cut -f3 -d " " | cut -f1 -d %`\"}"
简要说明:首先,看一下man cut
,尤其是 -f 和 -d 参数。s 只是双\"
引号,应该在前面加上一个反斜杠,以免被 shell 解释器误解。最后,任何用反引号 `` 括起来的东西都会被执行,如此处所述。
试试这一行:
your commands ...|awk 'BEGIN{FS="\\(s\\):\\s*";OFS="";q="\x22" }{$1=q$1q;sub(/%.*$/,"%",$2);$2=q$2q; print $1,$2}'
用你的数据测试:
kent$ echo "Cpu(s): 6.2%us, 1.6%sy, 0.2%ni, 90.9%id, 1.1%wa, 0.0%hi, 0.0%si, 0.0%st"|awk 'BEGIN{FS="\\(s\\):\\s*";OFS="";q="\x22" }{$1=q$1q;sub(/%.*$/,"%",$2);$2=q$2q; print $1,$2}'
"Cpu""6.2%"