我想以json形式獲得以下小shell腳本的輸出。以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" }
我如何轉換等每一個shell腳本的輸出JSON形式?
我想以json形式獲得以下小shell腳本的輸出。以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" }
我如何轉換等每一個shell腳本的輸出JSON形式?
你可以試試這個
echo "{\"Cpu\":\"`top -b -d1 -n1 | grep Cpu | cut -f3 -d " " | cut -f1 -d %`\"}"
簡要說明:首先,看看man cut
,特別是-f和-d參數。 \"
只是雙引號,應該在前面加上反斜槓以避免shell解釋器的誤解。最後,任何用引號括起來的東西都會被執行,如here所述。
有效的Json格式爲{「Cpu」:「6.3」},您非常接近所需的輸出。 – 2013-03-13 11:18:47
該腳本已更新。我還添加了一些說明,以便您知道這裏發生了什麼。 – 2013-03-13 11:21:45
工作很棒! – 2013-03-13 11:21:56
嘗試這一行:
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%"
它非常接近輸出。它給我「Cpu」「6.3%」 – 2013-03-13 11:03:08
@ K.KPatel如果你運行'top',這個數字是動態的,它取決於你的CPU負載。 – Kent 2013-03-13 11:05:31
一切都很好。「6.3」之間有一個空格。你只需要一個修改。 – 2013-03-13 11:07:38
你期望輸出什麼? – Kent 2013-03-13 10:16:00
就是這樣?只有'「Cpu」「6.2%」'?我建議你在你的問題中爲該行添加一個期望輸出,以便你可以爲你的問題得到正確的答案。 – Kent 2013-03-13 10:34:21
你想要一個bash腳本,說一兩行嗎? – 2013-03-13 11:00:55