У меня есть поток информации с последовательного входа (антенны GPS), и я хочу вывести эту информацию в текстовый файл при каждом вводе (в данном случае каждую секунду), но вместо того, чтобы добавлять его в конец файла, как это делал бы> после начальной перезаписи, я бы хотел, чтобы он перезаписывал его каждую секунду, чтобы отображалась только последняя информация.
Я пробовал \ r, который дает эффект в bash, но не в выходном файле.
cat /dev/ttyACM0 | grep --line-buffered -E "GNGGA" | awk 'BEGIN {FS=","};{printf "%s%s\t\t%s%s\t\t%s%s\t%s%s","Time= ",$2,"Lat= ",$3,"Lon= " ,$5,"Alt= " ,$10; fflush(stdout) }' > somefiles.txt
Это включает в себя начальный ввод, grep для фокусировки на одной строке и awk для получения определенных частей информации, которая мне нужна. Насколько я знаю, они не влияют на проблему перезаписи.
Time= 155325.00 Lat= 7428.77433 Lon= 82845.15963 Alt= 21.5
Это результат, который начинается с перезаписи файла somefiles.txt, но затем добавляется, пока вы не остановитесь и не запустите команду снова.
Так есть ли способ сделать так, чтобы в текстовом файле отображалась только последняя введенная строка?
Спасибо
Вы можете печатать
или printf
прямо в файл внутри awk
и закрывать его после каждой записи. Это заставит awk
повторно открыться и обрезаться при следующем отпечатке.
awk -vfile=test.out '{print $0 > file; close(file)}'
(Строго говоря, здесь вы получаете состояние гонки, другой процесс может попытаться прочитать файл просто между усечением и записью, так что он будет казаться пустым (или, что еще хуже, но менее вероятно, частичным).)