我用它来显示我的 CPU 温度。
echo CPU 温度 >> /home/andy/bin/HD_AND_CPU_TEMPS.txt
sensors -f | grep "temp1" >> /home/andy/bin/HD_AND_CPU_TEMPS.txt
geany /home/andy/bin/HD_AND_CPU_TEMPS.txt
radeon 是我的图形 CPU。
radeon-pci-0008
Adapter: PCI adapter
temp1: +115.1°F (crit = +248.0°F, hyst = +213.6°F)
k10temp-pci-00c3
Adapter: PCI adapter
temp1: +82.4°F (high = +158.0°F)
(crit = +169.5°F, hyst = +168.3°F)
我希望文件仅显示第二个温度。
但是有两个 temp1?
如何才能仅显示第二个温度?
答案1
以下代码temp1
仅当该行位于包含以下内容的行之后时才打印该行k10temp-pci-00c3
:
$ sensors -f | awk '/k10temp-pci-00c3/{f=1} f && /temp1/{print; f=0}'
temp1: +82.4°F (high = +158.0°F)
如果你还想要标题:
$ cat sensors-f | awk 'BEGIN{print"CPU Temperature"} /k10temp-pci-00c3/{f=1} f && /temp1/{print; f=0}'
CPU Temperature
temp1: +82.4°F (high = +158.0°F)
怎么运行的
BEGIN{print"CPU Temperature"}
打印标题。/k10temp-pci-00c3/{f=1}
当找到f
包含的行时,将 awk 变量设置为 1(true)。k10temp-pci-00c3
f && /temp1/{print; f=0}
f
如果为真且行包含,则将打印一行temp1
。这也会将其设置f
回零(假)。
替代方案:使用 sed
$ sensors -f | sed -n '/k10temp-pci-00c3/,/temp1/{/temp1/p}'
temp1: +82.4°F (high = +158.0°F)
答案2
你可以将芯片名称作为参数传递sensors k10temp-pci-00c3
给 let传感器软件仅读取这个特定的传感器。
$ sensors k10temp-pci-00c3
Adapter: PCI adapter
temp1: +82.4°F (high = +158.0°F)
(crit = +169.5°F, hyst = +168.3°F)
与读取所有可用传感器然后限制输出相比,这将导致更快的读取速度。
然后你可能只想获取 temp1 行,最简单的方法是使用 grep
$ sensors k10temp-pci-00c3 | grep temp1
temp1: +82.4°F (high = +158.0°F)
仅获取温度:使用 awk 将该行视为列并获取第二列
$ sensors k10temp-pci-00c3 | grep temp1 | awk '{print $2}'
+82.4°F
我相信这种方法速度更快并且消耗更少的处理能力。
对于使用不同机器的其他人,传感器输出可能不同,请相应地更改 grep 的内容。在我的机器上,传感器标签Tdie
是temp1