我的设备上连接了一个气象站,并在其上吐出 NMEA 0183/tty/USB0
我已经弄清楚如何解析数据并在脚本中回显我想要的内容。
我现在需要做的是将/tty/USB0
文件写入文件,然后当我调用脚本时,我希望它回显某些逗号分隔字段的最小/最大/平均值。
现有代码:将气象站的数据输出到临时文件,然后在屏幕上显示该文件
#!/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
。
答案1
您可以首先在将数据接收到日志文件时对其添加时间戳:
awk '{print strftime("%Y.%m.%d.%H%M%S ") $0}' </tty/USB0 >>logfile
您可以选择易于解析的格式。当然,数据可能已经有时间戳。上面给出了以固定宽度日期和时间开头的行,例如:
2015.07.07.093953
然后,您可以在脚本中浏览数据并提取您感兴趣的条目。例如,要在 shell 脚本中使用最近 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。通过选择固定宽度的日期格式,首先是年份,最后是秒,我们可以在日期之间进行简单的字符串比较。