Как один из вариантов, можно применить текстовый процессор awk для расчленения текста. Например:
echo "Temp = 25 *C, Hum = 31 %" | grep "Temp" | awk '{print$3}' >> file-temp.txt
echo "Temp = 25 *C, Hum = 31 %" | grep "Temp" | awk '{print$7}' >> file-hum.txt
Комбинация:
echo "Temp = 25 *C, Hum = 31 %"
- это эмуляция вывода программы, которая выводит результат.
Сам процесс детально:
| grep "Temp" - из вывода выделяем именно строку с параметрами по наличию Temp и перенаправляем дальше:
| awk '{print$3}' - здесь awk отделяет из всего ввода третье слово с начала строки (параметр print$3) и выводит только его в файл, причём дописывая (оператор ">>" ) новые значения в новую строку:
>> file-temp.txt
Вторая строка примера отличается только выводом 7-го слова.
Важно! Нужно учесть, как будут отображаться отрицательные температуры - или это будет целое слово, например -25, или с пробелом: - 25 . В первом случае алгоритм отработает корректно, во втором - минус посчитается за отдельное слово.
Процесс проходит в два этапа - сначала сохраняется температура, а затем влажность.
В итоге получится два файла в которых каждая строка - это единственное значение.
Если нужно реализовать процесс в один проход, то нужно сначала вывод сохранить во временный файл, а затем запустить скрипт для его "разборки" по файлам.
Если в итоге нужен лог, то не имеет смысла просто сохранять массив данных без привязки ко времени - надо добавлять текущее время, применив команду date с опциями формата вывода.
Например, как будет выглядеть однопроходный процесс с записью в разные логи:
Предположим вывод сохраняется в /tmp/result.txt
#!/bin/bash
# Задаём переменные, указывающие на файлы
RESULT_FILE="/tmp/result.txt" # путь до файла, куда записывается вывод
SUMMARY_LOG="/tmp/summary.log" # путь до полного лога
TEMP_LOG="/tmp/temperature.log" # путь до лога температуры
HUM_LOG="/tmp/humidity.log" # путь до лога влажности
# Проверки
test -r $RESULT_FILE || exit 0 # Если файла нет или он нечитаем - ничего не делаем, просто завершить работу
test -r $SUMMARY_LOG || touch $SUMMARY_LOG # Если файла нет или он нечитаем - создаём его.
test -r $TEMP_LOG || touch $TEMP_LOG # Если файла нет или он нечитаем - создаём его.
test -r $HUM_LOG || touch $HUM_LOG # Если файла нет или он нечитаем - создаём его.
# Разбор текста и сохранение текста в переменные
TEMPER=`cat $RESULT_FILE | grep "Temp" | awk '{print$3}'`
HUMID=`cat $RESULT_FILE | grep "Temp" | awk '{print$7}'`
# Создание временной метки про формат - смотреть man date
TIMESTAMP=`date +"%F %R"`
# Вывод
echo "$TIMESTAMP $TEMPER $HUMID" >> summary.log
echo "$TIMESTAMP $TEMPER" >> temperature.log
echo "$TIMESTAMP $HUMID" >> humidity.log
exit 0
Лог summary.log - опциональный, в нём содержится оба значения за раз:
cat summary.log
2015-05-15 20:51 24 31
2015-05-15 20:54 22 33
2015-05-15 20:54 21 31
- это самая простейшая текстовая база данных. Если немного уложнить, можно и MySQL прикрутить с дальнейшей обработкой и постройкой графиков. Кстати, я поторопился и записались два значения с одним временем - 20:54. Одно дело, если сбор данных будет идти раз в пять минут, а другое - стохастично. В этом случае в формат штампа времени нужно ввести секунды и даже миллисекунды. Всё есть в man date.
Небольшое пояснение, зачем нужны проверки. Первая проверка логична - если файла нет, то и выполнять дальнейшие вещи не имеет смысла. Со второй по четвёртую смысл таков - вывод результата производится не командой замещения - >, а дополнения - >> . Встречались случаи, когда дополнение не работает в несуществующий файл. Так, если файл ещё не создан, просто выводится ошибка. Без этой проверки bash в Ubuntu 14.04 выполняет создание нового файла и добавляет в него данные, но лучше проверить.
test -r $HUM_LOG - выполняется проверка, существует ли файл и есть ли у скрипта, в котором выполняется команда, права на чтение этого файла. Выдаёт "0", если истинно.
|| - операция логического ИЛИ
Если в левой части "1", то выполняется команда touch $HUM_LOG
На будущее - текстовый лог рано или поздно достигнет большого размера, что его будет сложно обрабатывать, поэтому нужно продумать месячную\недельную\дневную ротацию. В этом отношении с базами данных намного проще, однако они потребляют гораздо бОльше ресурсов.
Очень рекомендую книжку Mendel Cooper "Advanced Bash-Scripting Guide" в переводе Алексея Кисилёва - в ней описано множество примеров программирования на bash. Есть в оксовской библиотечке.
Примерно так.