Atualmente, estou usando um GPS globalsat G-STAR IV que me fornece a seguinte saída (que vem do GPS a cada 1 segundo) e salvo essa saída redirecionando para um nome de arquivo "gpsoutput.tr". Este arquivo é constantemente atualizado cada vez que recebe um sinal de GPS. O conteúdo deste arquivo é o seguinte:
$GPGSV,3,2,10,14,43,184,,27,33,314,,29,21,152,,16,17,263,*7D
$GPGSV,3,3,10,24,10,092,,19,06,322,*79
$GPRMC,095827.000,A,2335.2440,N,05809.8432,E,0.55,103.38,091114,,,A*66
$GPGGA,095828.000,2335.2443,N,05809.8433,E,1,04,5.2,89.5,M,-34.7,M,,0000*46
$GPGSA,A,3,21,22,18,15,,,,,,,,,6.4,5.2,3.6*3C
$GPRMC,095828.000,A,2335.2443,N,05809.8433,E,1.21,102.44,091114,,,A*63
$GPGGA,095829.000,2335.2446,N,05809.8434,E,1,04,5.2,89.5,M,-34.7,M,,0000*45
$GPGSA,A,3,21,22,18,15,,,,,,,,,6.4,5.2,3.6*3C
$GPRMC,095829.000,A,2335.2446,N,05809.8434,E,0.92,102.44,091114,,,A*69
$GPGGA,095830.000,2335.2448,N,05809.8437,E,1,04,5.2,89.5,M,-34.7,M,,0000*40
$GPGSA,A,3,21,22,18,15,,,,,,,,,6.4,5.2,3.6*3C
$GPRMC,095830.000,A,2335.2448,N,05809.8437,E,1.25,102.12,091114,,,A*62
$GPGGA,095831.000,2335.2450,N,05809.8441,E,1,04,5.2,89.5,M,-34.7,M,,0000*49
$GPGSA,A,3,21,22,18,15,,,,,,,,,6.4,5.2,3.6*3C
$GPRMC,095831.000,A,2335.2450,N,05809.8441,E,1.47,101.80,091114,,,A*67
$GPGGA,095832.000,2335.2455,N,05809.8446,E,1,04,5.2,89.5,M,-34.7,M,,0000*48
$GPGSA,A,3,21,22,18,15,,,,,,,,,6.4,5.2,3.6*3C
$GPGSV,3,1,10,21,55,052,18,22,54,297,14,18,53,011,22,15,18,042,18*72
$GPGSV,3,2,10,14,43,184,,27,33,314,,29,21,152,,16,17,263,*7D
$GPGSV,3,3,10,24,10,092,,19,06,322,*79
$GPRMC,095832.000,A,2335.2455,N,05809.8446,E,2.36,100.07,091114,,,A*6D
esse arquivo ("gpsoutput.tr") continua sendo adicionado com novas linhas cada vez que recebe um sinal de GPS.
Agora, eu tenho um arquivo bash que executa um programa awk continuamente para extrair a (velocidade), a (latitude, longitude) e a (data e hora UTC) em três arquivos diferentes. Este é o script bash:
#!/bin/sh
echo "Starting GPS info gathering"
while true; do
awk -F, -f gpsgetinfo.awk gpsoutput.tr
done
Finalmente, meu programa awk é muito simples, e eu quero que ele leia constantemente o último registro do arquivo gpsoutput.tr e extraia as informações acima mencionadas, nos três arquivos separados. o programa awk (gpsgetinfo.awk) é o seguinte:
BEGIN {
FS = ",";
OFS = " ";
while ((getline < "gpsoutput.tr") > 0) {
if($1=="$GPRMC") {
converted = $8*1.852;
printf $4 " " $6 "\n" >> "data1.txt";
printf "%.3f \n", converted >> "speed.txt";
printf $2 "\n" >> "gpstime.txt";
}
}
}
END {
fflush();
}
O problema é que em meus arquivos de saída ( data1.txt
, speed.txt
e gpstime.txt
) do programa awk
, a mesma saída está repetindo várias vezes e em poucos segundos, o tamanho do arquivo está atingindo para o tamanho de mega bytes. Para deixar claro. É assim que meu arquivo de saída de hora do utc parece:
095546.000
095547.000
095546.000
095547.000
095546.000
095547.000
095546.000
095547.000
095546.000
095547.000
095546.000
095547.000
095546.000
e se repete por várias vezes 100 no arquivo.
Enquanto a saída esperada no gpstime.tr deve ser apenas:
095546.000
095547.000
095548.000
095549.000
095550.000
095551.000
e assim por diante .. desde que o sinal GPS é recebido a cada 1 segundo.
O arquivo gpsoutput.tr
no qual os dados nmea estão sendo salvos, é de apenas alguns kbs e sem nenhuma recorrência nos dados.
Alguém pode me dizer. Por que os arquivos de saída estão tendo tantos valores repetidos? Eu também tentei usar printf $4 " " $6 "\n" > "data1.txt";
(único >
em vez de >>
) mas não funcionou para mim.