улучшить скрипт bash

У меня есть четырехъядерный рабочий стол, и я хотел узнать среднюю температуру по датчикам. так что я написал этот вкладыш bash 1.

echo `sensors -A | awk {'print $3'} | sed 's/+\|(crit\|0:\|°C//g'` |  awk '{print ($1 + $2 + $3 + $4)/4}'

но это не идеально, я уверен. например, если количество ядер изменится, мой скрипт сломается или просто будет не таким точным. Как я могу написать скрипт, который смотрит на число или выходные значения и корректирует количество ядер?

как в (псевдокод впереди):

echo `sensors -A | awk {'print $3'} | sed 's/+\|(crit\|0:\|°C//g'` |  awk '{print ($n + $n+1 <=($number of cores)) )/($number of cores)}'

Я надеюсь, что это человек удобочитаемый. Вывод первой части выглядит примерно так:

$  echo `sensors -A | awk {'print $3'} | sed 's/+\|(crit\|0:\|°C//g'`
31.0 31.0 26.0 27.0

Могу ли я получить некоторые советы по получению средней температуры процессора?

4
задан 9 April 2015 в 19:35

3 ответа

Вы могли сделать что-то как

sensors -A | grep -oP '^Core.+?  \+\K\d+' | awk '{k+=$1}END{print k/NR}'

, grep распечатает только соответствующие числа (пробелы гарантируют, что только фактическая температура печатается, не критическое или что-либо еще) и эти awk делает вычисление. NR количество строк так, чтобы работал, если количество ядер изменится.

0
ответ дан 9 April 2015 в 19:35

Используя "необработанный вывод" режим sensors для более легких сценариев:

-u    Raw output. This mode is suitable for debugging  and  for  post-
      processing  of  the  output  by  scripts. It is also useful when
      writing a configuration file because  it  shows  the  raw  input
      names which must be referenced in the configuration file.

, Например:

$ sensors -Au
coretemp-isa-0000
Physical id 0:
  temp1_input: 63.000
  temp1_max: 85.000
  temp1_crit: 105.000
  temp1_crit_alarm: 0.000
Core 0:
  temp2_input: 51.000
  temp2_max: 85.000
  temp2_crit: 105.000
  temp2_crit_alarm: 0.000

Вооруженный с такими приятно маркированными полями, можно создать намного более простую команду awk:

sensors -Au | awk '/temp.*_input/{temp += $2; count += 1} END {print temp/count}'

По существу, для каждого temp.*_input поле, добавляет температура и увеличивает количество, затем в конце, печатает общее количество, разделенное на количество.

0
ответ дан 9 April 2015 в 19:35

Можно получить количество процессоров с помощью

grep -c ^processor /proc/cpuinfo
0
ответ дан 9 April 2015 в 19:35

Другие вопросы по тегам:

Похожие вопросы: