LINUX.ORG.RU
решено ФорумAdmin

Решите за меня задачку с разбором вывода, пожалуйста!


0

1

У меня есть пробел, не могу пока допетрить как разбирать строки на bash, разобраться пока не хватает времени к сожалению, а разобрать строчку нужно. Кому не сложно, пожалуйста! На ваших примерах поучусь.

~$ sensors
atk0110-acpi-0
Adapter: ACPI interface
Vcore Voltage:      +1.16 V  (min =  +0.85 V, max =  +1.60 V)
 +3.3 Voltage:      +3.33 V  (min =  +2.97 V, max =  +3.63 V)
 +5 Voltage:        +5.09 V  (min =  +4.50 V, max =  +5.50 V)
 +12 Voltage:      +11.93 V  (min = +10.20 V, max = +13.80 V)
CPU FAN Speed:     3110 RPM  (min =  600 RPM)
CHASSIS1 FAN Speed:   0 RPM  (min =  600 RPM)
CHASSIS2 FAN Speed:   0 RPM  (min =  600 RPM)
POWER FAN Speed:      0 RPM  (min =  600 RPM)
CPU Temperature:    +20.0°C  (high = +60.0°C, crit = +95.0°C)
MB Temperature:     +30.0°C  (high = +45.0°C, crit = +95.0°C)
Нужно получить значения температур (только цифры без единиц измерения и знака «+»):

  • CPU Temperature
  • MB Temperature

В командах извлекающих значение температуры не может быть запятых ","

★★★★★

cputemp=$(sensors|grep CPU\ Temp | awk '{ print $3 }'|grep -oE '[0-9]{1,3}.[0-9]')
mbtemp=$(sensors|grep MB\ Temp | awk '{ print $3 }'|grep -oE '[0-9]{1,3}.[0-9]')

snoopcat ★★★★★
()
Ответ на: комментарий от snoopcat

Спасибо

~$ sensors|grep CPU\ Temp | awk '{ print $3 }'|grep -oE '[0-9]{1,3}.[0-9]'
21.0
~$ sensors|grep MB\ Temp | awk '{ print $3 }'|grep -oE '[0-9]{1,3}.[0-9]'
31.0
petav ★★★★★
() автор топика
Ответ на: комментарий от snoopcat

Прошу прощения, на автомате просто

Все ок!

~$ sensors | sed -r '/CPU Temperature|MB Temperature/{s/^.*: +[+-]//;s/^([0-9.]+).*/\1/;p};d'
20.0
31.0

petav ★★★★★
() автор топика
Ответ на: комментарий от snoopcat

Тоже в некотором роде костыли. С одной стороны, grep -E мне нравится больше (он выглдяит красивее), а с другой - меня несколько настораживает запуск нескольких утилит в пайпе там, где хватило бы и одной.

Например, в Вашем случае `grep CPU\ Temp | awk '{ print $3 }'` можно было бы заменить на awk '/CPU Temp/{ print $3 }'. А ведь сам awk тоже умеет регулярные выражения, и его можно было бы заставить ещё и выцепить нужную подстроку:
awk '/CPU Temp/{ gsub(/^[+-]/,"",$3);gsub(/[^0-9.]+$/,"",$3); print $3 }'

AITap ★★★★★
()

Спасибо

Мужики, благодарю.

petav ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.