Улучшить скрипт 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
Могу ли я получить некоторые советы по получению средней температуры процессора?
3 ответа
Вы могли бы сделать что-то вроде
sensors -A | grep -oP '^Core.+? \+\K\d+' | awk '{k+=$1}END{print k/NR}'
Grep будет печатать только соответствующие цифры (пробелы гарантируют, что будет напечатана только фактическая температура, а не критическая или что-либо еще) и awk
делает расчет. NR
количество строк, которое будет работать, если количество ядер изменится.
Используя режим "необработанного вывода" 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
В поле добавьте температуру и увеличьте счетчик, затем в конце выведите сумму, деленную на счетчик.
Вы можете получить количество процессоров, использующих
grep -c ^processor /proc/cpuinfo