我试图解析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代替白色空格,但仍不给小数点后的数字。
答案 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