串行数据流上的实时数学运算
Live math on serial data stream
我有一个硬件 GPS 可以打印出一些数据:
sudo cat /dev/ttyGPS_Device | grep -a GPRMC
它每半秒左右打印一次,看起来像这样:
$GPRMC,171450.000,A,4239.245592,N,07349.887355,W,0.000,116.6,150420,,,A*74
$GPRMC,171503.000,A,4239.245592,N,07349.887355,W,0.000,116.6,150420,,,A*73
$GPRMC,171504.000,A,4239.245592,N,07349.887355,W,0.000,116.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 W
42.39245592 N -73.49887355 W
42.39245592 N -73.49887355 W
我可以接受非 bash
解决方案,但我更喜欢漂亮的单衬垫。我用来获取 GPS 数据的硬件是 Ericsson H5321 gw Mobile Broadband Module
追加 GNU awk:
| awk '{printf("%.8f %s -%.8f %s\n",/100,,/100,)}'
输出:
42.39245592 N -73.49887355 W
42.39245592 N -73.49887355 W
42.39245592 N -73.49887355 W
一行shell:
xargs -I"{}" -l1 sh -c 'IFS=,;set -- ;LC_NUMERIC=C;printf "%f N %f W\n" "" ""' {}
显然 ,shell 算术只处理整数,所以没有值的缩放。
我有一个硬件 GPS 可以打印出一些数据:
sudo cat /dev/ttyGPS_Device | grep -a GPRMC
它每半秒左右打印一次,看起来像这样:
$GPRMC,171450.000,A,4239.245592,N,07349.887355,W,0.000,116.6,150420,,,A*74
$GPRMC,171503.000,A,4239.245592,N,07349.887355,W,0.000,116.6,150420,,,A*73
$GPRMC,171504.000,A,4239.245592,N,07349.887355,W,0.000,116.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 W
42.39245592 N -73.49887355 W
42.39245592 N -73.49887355 W
我可以接受非 bash
解决方案,但我更喜欢漂亮的单衬垫。我用来获取 GPS 数据的硬件是 Ericsson H5321 gw Mobile Broadband Module
追加 GNU awk:
| awk '{printf("%.8f %s -%.8f %s\n",/100,,/100,)}'
输出:
42.39245592 N -73.49887355 W 42.39245592 N -73.49887355 W 42.39245592 N -73.49887355 W
一行shell:
xargs -I"{}" -l1 sh -c 'IFS=,;set -- ;LC_NUMERIC=C;printf "%f N %f W\n" "" ""' {}
显然