私はこれを使って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
。これもf
0 (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