我需要从Linux Ubuntu应用程序,传感器中提取并处理图形卡温度整数以下输出:
amdgpu-pci-0c00
Adapter: PCI adapter
fan1: 1972 RPM
temp1: +50.0°C (crit = +0.0°C, hyst = +0.0°C)
amdgpu-pci-0600
Adapter: PCI adapter
fan1: 1960 RPM
temp1: +47.0°C (crit = +0.0°C, hyst = +0.0°C)
amdgpu-pci-0200
Adapter: PCI adapter
fan1: 1967 RPM
temp1: +52.0°C (crit = +0.0°C, hyst = +0.0°C)
pch_skylake-virtual-0
Adapter: Virtual device
temp1: +33.0°C
amdgpu-pci-0900
Adapter: PCI adapter
fan1: 1893 RPM
temp1: +51.0°C (crit = +0.0°C, hyst = +0.0°C)
amdgpu-pci-0300
Adapter: PCI adapter
fan1: 1992 RPM
temp1: +53.0°C (crit = +0.0°C, hyst = +0.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +24.0°C (high = +80.0°C, crit = +100.0°C)
Core 0: +23.0°C (high = +80.0°C, crit = +100.0°C)
Core 1: +21.0°C (high = +80.0°C, crit = +100.0°C)
假设我想提取与amd gpu temperature相关的信息,分别为50,47,52,51和53.到目前为止,我所执行的代码是:
sensors|grep temp| grep -Eo '\+[0-9]{0,9}'
我得到了:
+50
+0
+0
+47
+0
+0
+52
+0
+0
+32
+51
+0
+0
+53
+0
+0
所以我需要弄清楚:
请帮忙。 问候
答案 0 :(得分:1)
您希望温度存储在数组中,然后您可以使用它们进行数学计算。
arr=( $( IFS=$'\n' gawk 'BEGIN{ RS="\n\n"} { if($0 ~ /amdgpu/) print $0 }' test.txt | gawk 'BEGIN{ FS="[+.]" } { if($1 ~ /temp1:/) print $2 }' ) )
echo "${arr[*]}"
50 47 52 51 53
test.txt包含您的示例输出。从传感器命令获取输入(未测试)
arr=( $( sensors | IFS=$'\n' gawk 'BEGIN{ RS="\n\n"} { if($0 ~ /amdgpu/) print $0 }' | gawk 'BEGIN{ FS="[+.]" } { if($1 ~ /temp1:/) print $2 }' ) )
echo "${arr[*]}"
50 47 52 51 53
答案 1 :(得分:1)
如果您愿意使用类似Perl的regexp,也可以使用单个grep获取临时值:
sensors | grep -oP 'temp\d:\s+\+\K\d+'
我们grep for temp
后面跟一个数字和一个冒号,然后是一个至少一个空白字符和一个加号,之后我们给出了后观断言\K
,它丢弃了之前的所有内容,最后的捕获只是\d+
(一个或多个数字)。