我用它来显示我的 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 的内容。在我的机器上,传感器标签Tdietemp1

相关内容