入力が更新されるたびに出力ファイルを上書きする方法

入力が更新されるたびに出力ファイルを上書きする方法

シリアル入力(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

これには、初期入力、1行に集中するためのgrep、必要な情報の特定の部分を取得するためのawkが含まれます。これは私が知っている限り、適用範囲の問題には影響しません。

Time= 155325.00     Lat= 7428.77433     Lon= 82845.15963    Alt= 21.5

まず、somefiles.txtの出力を上書きしてから停止し、コマンドを再実行するまで追加します。

それでは、最新の入力をテキストファイルに1行だけ表示する方法はありますか?

ありがとう

ベストアンサー1

あなたはできますprintまたはprintf直接ファイルとしてその中にawk入れ、各書き込みの後に閉じます。awk次回の印刷時に再開して切り取ります。

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

(厳密に言えば、ここに競合状態があり、他のプロセスがファイルを読み取ろうとします。ただ切り取りと書き込みの間にあるため、空のように見えます(またはより悪いが部分的ではありません)。 )

おすすめ記事