将cpu温度存储在变量中

时间:2014-07-20 03:16:16

标签: regex linux awk grep temperature

我试图解析lm-sensors在Linux shell命令中提供的温度信息:$sensors

我怀疑我对此感到困惑。第一:是否存在预先存在的环境变量或CPU温度?

我尝试使用命令:

$ sensors -A -f | awk '{print $2}'

+136.4°F

但是我得到了一些不受欢迎的空白区域,以及一些不需要的其他角色。比如+。学位标志,F。

然后我尝试用以下方法将数字弄出来: sensors -A -f | awk '{print $2}' | egrep -o [0-9]\.?[0-9] 但每次,我得到小数点前的数字,但我似乎无法得到小数点后的数字。

我想做的就是将系统cpu temp变为变量。这是最好的路线吗?请帮助我获得cpu温度。

更新:

sensors -A -f | awk '{print $2+0}' 0 77 0 用0代替白色空格,但仍不给小数点后的数字。

4 个答案:

答案 0 :(得分:4)

通常,当您使用awk时,无需使用grep。你的命令可能简化为:

sensors -A -f | awk '{print $2+0}'

测试:

$ awk '{print $2+0}' <<< "abc +136.4°F"
136.4

要仅打印第二列为(非零)数字的行,您可以执行以下操作:

awk '$2+0 {print $2+0}'

答案 1 :(得分:2)

您的正则表达式匹配单个数字,(可选)十进制小数点,然后是另一个数字。

试试这个正则表达式:

[0-9]+(\.[0-9]+)?

这匹配多个数字,后跟可选的小数点和更多数字。请注意'+',这意味着&#34;一个或多个&#34;和(...)组。

(为了完整起见,您可能应该在正则表达式中包含一个前导'-' ...但不知何故,我认为您不太可能在实践中看到这一点。)

答案 2 :(得分:1)

试试这个:

export LC_ALL=C
sensors -A -f | awk 'NF{print $2+0}'

我怀疑您遇到的问题是您的默认LOCALE使用逗号代替句点来分隔数字。

如果不是,那么,已经按照要求进行了几次,请更新您的问题,以便在您的系统上显示sensors -A -f的输出,以便我们有机会帮助您。

答案 3 :(得分:-1)

如果python适合你...

import subprocess
p1 = subprocess.Popen(["sensors"], stdout=subprocess.PIPE)
output = p1.communicate()
A = output[0]
temp = float(A[56:60])

输出:

In [10]: temp
Out[10]: 57.0