Cut string da saída do comando

2

Gostaria de cortar 150.8 desta string temp1: +150.8°F (crit = +197.6°F) . Aqui está o meu script para registrar temperaturas com o comando sensors :

#!/bin/bash
now=$(date +"%m_%d_%Y")    # get current date
now_excel=$(date +"%D %H:%M")    # get current date & time in excel format

file_dir="/var/www/html/logs"
file="$file_dir/logging_$now.csv"    # backup name and directory

temp=$(sensors -Af | sed -n '2{p;q}')    # temp1:       +150.8°F  (crit = +197.6°F)
#temp_num="$temp" | sed 's/+\(.*\)°//g'

# add line to csv
printf "$now_excel" >> "$file"
printf ", " >> "$file"
printf "$temp" >> "$file"
printf "\n" >> "$file"

find "$file_dir"/* -mtime +3 -exec rm {} \;    # remove any backup files older than 3 days

exit 0
    
por xinthose 20.07.2016 / 21:46

1 resposta

2

Usando sed

Aqui está uma maneira:

$ sensors -Af | sed -n '2{s/°.*//; s/[^+-]*//; p; q}'
+105.8

Ou usando o mesmo comando dentro da substituição de comandos para capturar sua saída em uma variável:

temp=$(sensors -Af | sed -n '2{s/°.*//; s/[^+-]*//; p; q}')

s/°.*// remove a primeira ocorrência do símbolo de grau, ° e tudo depois dele. s/[^+-]*// remove tudo, mas não inclui o primeiro + ou - .

Usando o awk

$ sensors -Af | awk 'NR==2{print $3+0; exit;}'
105.8

O número que queremos está no terceiro campo. Como o terceiro campo contém caracteres, por exemplo, +105.8°F , adicionamos 0 a ele. Isso força o awk a convertê-lo para o que queremos: um número.

    
por 20.07.2016 / 21:52