以单行脚本的形式获取CPU临时温度的平均值

时间:2018-10-07 09:43:16

标签: bash shell

我需要平均系统上四个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就可以得到平均数,但是我对如何实现这一点感到困惑,因为它是对我已经酝酿的单线的扩展。并且由于其他一些限制,我需要将其保持为单一格式。

我敢肯定,有一种简单的方法可以实现我所追求的目标,任何指针都值得赞赏!

2 个答案:

答案 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`