Как перезаписывать выходной файл при каждом обновлении входных данных

У меня есть поток информации с последовательного входа (антенны 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, но затем добавляется, пока вы не остановитесь и не запустите команду снова.

Так есть ли способ сделать так, чтобы в текстовом файле отображалась только последняя введенная строка?

Спасибо

0
06.04.2017, 19:23
1 ответ

Вы можете печатать или printf прямо в файл внутри awk и закрывать его после каждой записи. Это заставит awk повторно открыться и обрезаться при следующем отпечатке.

awk -vfile=test.out '{print $0 > file; close(file)}'

(Строго говоря, здесь вы получаете состояние гонки, другой процесс может попытаться прочитать файл просто между усечением и записью, так что он будет казаться пустым (или, что еще хуже, но менее вероятно, частичным).)

1
28.01.2020, 02:46

Теги

Похожие вопросы