私はこれを使ってCPUの温度を表示しています。

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)

ファイルには 2 番目の温度のみが表示されるようにしたいです。

しかし、temp1 が 2 つあるのですか?

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}fを含む行k10temp-pci-00c3が見つかった場合、 awk 変数を 1 (true) に設定します。

  • f && /temp1/{print; f=0}fが true で、その行に が含まれている場合は、行を出力しますtemp1。これもf0 (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を使用してその行を列として扱い、2番目の列を取得します。

$ sensors k10temp-pci-00c3 | grep temp1 | awk '{print $2}'
+82.4°F

この方法はより高速に動作し、処理能力の消費も少なくなると考えています。

Tdie異なるマシンを使っている人の場合、センサーの出力は異なる可能性があります。それに応じてgrepする内容を変更してください。私のマシンでは、センサーラベルはtemp1

関連情報