Как читать и делать min / max / avg из потока NMEA

У меня есть метеостанция, прикрепленная к моему устройству, плетущая NMEA 0183 on /tty/USB0

Я alreeady разобрался, как разбирать данные и эхо, что я хочу в сценарии.

Теперь мне нужно /tty/USB0 файл /tty/USB0 в файл, а затем, когда я вызываю свой скрипт, я хочу, чтобы он отображал min / max / avg для определенных полей с разделителями-запятыми.

Существующий код: выводит данные из метеостанции во временный файл, а затем отображает этот файл на экране

 #!/bin/sh awk -F, '/\$WIMDA/ {print $4*1000" millibars""\n" $6" Celsius""\n" $10"% Humidity""\n" "Wind Direction "$14 " Degrees""\n" "Wind Speed "$20*3.6 " km/h""\n"; fflush(); exit }' /dev/ttyUSB0 > weather1.txt cat weather1.txt 

Я хочу сделать это до $6 $20 .

One Solution collect form web for “Как читать и делать min / max / avg из потока NMEA”

Вы можете начать с timestamping данных по мере их получения в файл журнала:

 awk '{print strftime("%Y.%m.%d.%H%M%S ") $0}' </tty/USB0 >>logfile 

Вы можете выбрать формат, который легко разобрать. Конечно, данные, возможно, уже имеют временную метку. В приведенном выше примере указаны строки с фиксированной шириной даты и времени, например:

 2015.07.07.093953 

В сценарии вы можете просмотреть данные и извлечь интересующие вас записи. Например, для среднего / максимального использования последних 24 часов в вашем сценарии оболочки:

 start=$(date --date="-1 days" +"%Y.%m.%d.%H%M%S") 

Это получает отметку времени в течение 24 часов в том же формате. Затем вы можете получить максимальное и среднее значение:

 awk -v start="$start" <logfile ' $1>=start { if($7>max7)max7 = $7 tot21 += $21+0 numdone++ } END { printf "max %g, ave %g\n",max7,tot21/numdone } ' 

Обратите внимание, что в начале строки есть дополнительное поле, вам нужно $ 7 для поля $ 6. Выбирая формат даты с фиксированной шириной с первым и последним годами, мы можем провести простое сравнение строк между датами.

  • vim: создать файл с + x бит
  • Как округлить или преобразовать значение float в int с помощью bc? получение: "(standard_in) 1: синтаксическая ошибка"
  • Сценарий оболочки для удаления всех файлов, которые являются более старыми
  • Считать количество вхождений регулярного выражения в круглых скобках
  • Как изменить текст внутри одинарных кавычек?
  • Когда и когда не использовать операторы с if?
  • Выполнить команду на нескольких хостах, но только команду печати, если она выполнена успешно?
  • Как восстановить несколько файлов, которые были перемещены в один?
  • Создание сетевых конфигурационных файлов с помощью sed и bash
  • Проверяет наличие статуса выхода, отличного от 0, после команды `command || return` недостижимый?
  • Петля, чтобы проверить, установлен ли пакет Debian или нет.
  • Interesting Posts

    Как добавить пусковую установку в gnome на fedora 20

    «Mac-стиль» распаковывается на linux

    Как увеличить счетчик строк для замены начала строки с помощью AWK / …?

    Аутентификация для обоих окон и пользователей Unix

    Как пропустить json-файл?

    Можно ли изменить оболочку, используемую для запуска приложений GUI из диспетчера рабочего стола?

    Правило iptables для локальной сети с бесплатным доступом в Интернет, блокирующее незапрашиваемое соединение из Интернета на сервер?

    Как я могу установить файлы заголовков ядра для Kali 1.1.0 (moto) "3.18.0-kali1-amd64"?

    Почему «tar -exclude» не использует несколько опций?

    Bash для эхо-первого позиционирования каждой строки в файл с именем второго

    Как конвертировать awk one-liner в автономный скрипт?

    команда telnet с пользовательской продолжительностью тайм-аута

    Почему время перезагрузки в последнем случае неверно?

    Перенаправление и пробелы вывода

    Сбой командной строки при использовании дерева каталогов / имени файла

    Linux и Unix - лучшая ОС в мире.