Eu tenho o mesmo problema e implementei uma solução:
Usando sed
para analisar a saída canalizada de sensors
com expressões regulares, o resultado é anexado ao arquivo de log.
- A data é gravada como timestamp do UNIX para arquivo e formatada como stdout. Para suprimir a quebra de linha, o comando
echo -n "$(date +"%H:%M:%S")
é usado. - Em seguida, a saída de
sensors
é canalizada parased
para analisar cada linha para encontrar as temperaturas pesquisando por°C
. - O resultado é canalizado para
sed
. Agora a string é dividida em três partes: O nome do sensor no início com dois pontos e espaços em branco^[a-zA-Z0-9 ]*:\s*
, A temperatura consistindo em sinal, números e ponto\([0-9.+-]*\)
e o restante no final da string.*$
. A segunda parte é marcada como referência pelo uso dos parênteses. - O resultado é novamente canalizado para
sed
para remover as quebras de linha. Clique para detalhes - Os scripts duram por X segundos. (No meu caso 5 segundos.)
O script em lote resultante:
# Printing the names of the columns as first row in file
echo "Time; temp1; temp2; Physical id 0; Core 0; Core 1; Core 2; Core 3; SIO Temp; temp3" > Temperatures.log
while true
do
# Printing the time and all temperatures to stdout
echo -n "$(date +"%H:%M:%S"): "
sensors | sed -n "/°C/p" | sed "s/^[a-zA-Z0-9 ]*:\s*\([0-9.+-]*\).*$//" | sed ':a;N;$!ba;s/\n/;\t/g'
# Logging time as UNIX time and temperatures to file
echo -n "$(date +"%s"); " >> Temperatures.log
sensors | sed -n "/°C/p" | sed "s/^[a-zA-Z0-9 ]*:\s*\([0-9.+-]*\).*$//" | sed ':a;N;$!ba;s/\n/;\t/g' >> Temperatures.log
# Sleeping for X seconds
sleep 5
done