Como substituir o arquivo de saída em cada atualização de entrada

Como substituir o arquivo de saída em cada atualização de entrada

Eu tenho um fluxo de informações de uma entrada serial (antenas GPS) e desejo gerar essas informações em um arquivo de texto em cada entrada (a cada segundo neste caso), mas em vez de anexá-las ao final do arquivo como > faria depois a substituição inicial, gostaria que ela fosse substituída a cada segundo, para que apenas as informações mais recentes sejam exibidas.

Eu tentei \r que atinge o efeito no bash, mas não no arquivo de saída.

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

Isso inclui a entrada inicial, um grep para focar em uma linha e um awk para obter as partes específicas das informações que preciso; elas não afetam o problema de substituição, até onde eu sei.

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

Esta é a saída que começa substituindo somefiles.txt, mas depois é anexa até você parar e executar o comando novamente.

Então, existe uma maneira de fazer com que apenas a entrada mais recente apareça como uma linha no arquivo de texto?

Obrigado

Responder1

Você podeprintou printfdireto para um arquivodentro awke feche-o após cada gravação. Isso faria awkreabrir e truncá-lo na próxima impressão.

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

(Estritamente falando, você obtém uma condição de corrida aqui, outro processo pode tentar ler o arquivoapenasentre truncar e escrever, então pareceria vazio (ou pior, mas menos provável, parcial).)

informação relacionada