Живая математика в потоке последовательных данных - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть аппаратный GPS, который выводит некоторые данные:

sudo cat /dev/ttyGPS_Device | grep -a GPRMC

Он печатается каждые полсекунды или около того и выглядит так:

$ GPRM C, 171450.000, A, 4239.245592, N, 07349.887355, W, 0.000.116.6, 150420 ,,, A * 74
$ GPRM C, 171503.000, A, 4239.245592, N, 07349.887355, W, 0,000,116.6,150420, ,, A * 73
$ GPRM C, 171504.000, A, 4239.245592, N, 07349.887355, W, 0.0001116.6,150420 ,,, A * 74

Я могу отфильтровать просто широту и долготу, выполнив:

sudo cat /dev/ttyACM2 | stdbuf -oL grep -a GPRMC | stdbuf -oL cut -d',' -f 4-7 | tr ',' '\t'

И этот вывод выглядит намного лучше:

4239.245592 N 07349.887355 W
4239.245592 N 07349.887355 W
4239.245592 N 07349.887355 W

Я хотел бы иметь возможность сделать некоторые математические и форматирование данных. В частности, ведущие нули должны становиться '-', и оба значения должны быть умножены на 100. Требуемый выход:

42,39245592 N -73,49887355 Вт
42,39245592 N -73,49887355 Вт
42,39245592 N -73,49887355 W

Я бы согласился с решением, отличным от bash, однако я предпочитаю хороший лайнер. Аппаратное обеспечение, которое я использую для получения данных GPS, - это мобильный широкополосный модуль Ericsson H5321 gw

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

Добавить GNU awk:

| awk '{printf("%.8f %s -%.8f %s\n",$1/100,$2,$3/100,$4)}'

Вывод:

42.39245592 N -73.49887355 W
42.39245592 N -73.49887355 W
42.39245592 N -73.49887355 W
1 голос
/ 15 апреля 2020

Однострочная оболочка:

xargs -I"{}" -l1 sh -c 'IFS=,;set -- $1;LC_NUMERIC=C;printf "%f N %f W\n" "$4" "$6"' {}

Очевидно, что @ DiegoTorresMilano упоминал , арифметика оболочки c обрабатывает только целые числа, поэтому масштабирование значений не выполняется.

...