#! /usr/bin/gawk -i BEGIN { FS = ";" C[2] = "Uptime" C[3] = "Time" C[4] = "Date" C[5] = "RMC" C[6] = "nSAT" C[7] = "Lat" C[8] = "Lon" C[9] = "SoG" C[10] = "kmh" C[11] = "CoG" C[12] = "Alt" C[13] = "bTemp" C[14] = "Temp" C[15] = "Hum" C[16] = "Pres" C[17] = "Vbat" C[18] = "Stat" n1 = 2 n2 = 18 for (n in C) C[C[n]] = n } function isGPS() { if (!/^\$/ || $C["RMC"]!="Y") return 0 split($C["Time"], TT, /:/) split($C["Date"], DD, /\./) ISO_Time = DD[3]"-"DD[2]"-"DD[1]"T"TT[1]":"TT[2]":"TT[3]"Z" Time=mktime(DD[3]" "DD[2]" "DD[1]" "TT[1]" "TT[2]" "TT[3], "UTC") file_epoch = Time-Uptime split($C["Lon"], LL, / /) Lon = LL[1]+LL[2]/60 if (LL[3]=="W") Lon = -Lon split($C["Lat"], LL, / /) Lat = LL[1]+LL[2]/60 if (LL[3]=="S") Lat = -Lat return 1 } function isLog() { if (!/^\$/) return 0 split($C["Uptime"], TT, /:/) Uptime = TT[1]*3600 + TT[2]*60 + TT[3] p=$C["Pres"]+0 T=$C["Temp"]+0 H=$C["Hum"]+0 V=$C["Vbat"]+0 Time = file_epoch+Uptime return isGPS()+1 } function doHead() { for (n=n1; n<=N2; n++) printf " %s", C[n] printf "\n" } function all() { gps = isLog() if (oldgps != gps) print Nix oldgps=gps if (gps>0) { printf "%d", Uptime printf " %.2f", $C["bTemp"] printf " %.2f", T printf " %.2f", H printf " %.2f", p printf " %.3f", V printf " %u", Time } if (gps>1) { printf " %s", ISO_Time printf " %d", $C["nSAT"] printf " %.7f %.7f %.1f", Lat, Lon, $C["Alt"] printf " %.3f %.1f", $C["SoG"], $C["CoG"] } if (gps>0) { printf "\n" } return gps } function gpslog() { printf "%d %.7f %.7f %.1f %.3f %.1f %d\n", Uptime, Lon, Lat, $C["Alt"], $C["SoG"], $C["CoG"], $C["nSAT"] }