Я использую это для отображения температуры моего процессора.

echo Температура процессора >> /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 — мой графический процессор.

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)

Я хочу, чтобы файл отображал только 2-ю временную переменную.

Но есть два temp1?

Как можно показывать только 2-ю температуру?

решение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}устанавливает переменную awk в 1 (истина), если найдена fстрока, содержащая .k10temp-pci-00c3

  • f && /temp1/{print; f=0}выведет строку, если ftrue и строка содержит temp1. Это также устанавливает fобратно на ноль (false).

Альтернатива: использование sed

$ sensors -f | sed -n '/k10temp-pci-00c3/,/temp1/{/temp1/p}'
temp1:        +82.4°F  (high = +158.0°F)

решение2

вы можете передать имя чипа в качестве аргумента, sensors k10temp-pci-00c3чтобы позволитьдатчикипрограммное обеспечение считывает только этот конкретный датчик.

$ 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

Связанный контент