我需要平均系统上四个CPU内核的温度。我正在使用以下命令获取各个内核的温度:
sysctl -a | awk '/temperature/ {print $2;}'
这会显示以下输出:
53.0C
53.0C
52.0C
52.0C
然后我将其传递给sed和tr,并通过一些脚本付诸表决,最后得到了以下一个衬里:
echo `sysctl -a | awk '/temperature/ {print $2;}' | sed s/C// | tr '\n' '+' | sed 's/\(.*\)+/\1/'` | bc`
随后将导致:
210
我现在只需要除以210/4
就可以得到平均数,但是我对如何实现这一点感到困惑,因为它是对我已经酝酿的单线的扩展。并且由于其他一些限制,我需要将其保持为单一格式。
我敢肯定,有一种简单的方法可以实现我所追求的目标,任何指针都值得赞赏!
答案 0 :(得分:2)
使用awk:
sysctl -a | awk -F '[ C]' '/temperature/{sum+=$2} END{print sum/NF}'
输出:
52.5
请参阅:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
答案 1 :(得分:1)
您可以使用以下方法在表达式周围加上括号和除以4:
{ echo -n "("; tr '\n' '+'; echo -n")/4"; }
最终结果是:
echo `sysctl -a | awk '/temperature/ {print $2;}' | sed s/C// | { echo -n "("; tr '\n' '+'; echo -n")/4"; } | sed 's/\(.*\)+/\1/'` | bc`