이것을 사용하여 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

라데온은 내 그래픽 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이 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 변수를 f1(true)로 설정합니다.k10temp-pci-00c3

  • f && /temp1/{print; f=0}f가 참이고 줄에 가 포함되어 있으면 줄을 인쇄합니다 temp1. 이 역시 f다시 0(거짓)으로 설정됩니다.

대안: 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 대상을 변경하십시오. 내 컴퓨터에서는 센서 라벨 Tdietemp1

관련 정보