모든 입력 업데이트에서 출력 파일을 덮어쓰는 방법

모든 입력 업데이트에서 출력 파일을 덮어쓰는 방법

직렬 입력(GPS 안테나)의 정보 스트림이 있고 해당 정보를 모든 입력(이 경우 매초)마다 텍스트 파일로 출력하려고 합니다. 그러나 > 이후에 수행하는 것처럼 파일 끝에 추가하는 대신 초기 덮어쓰기 매초마다 덮어써서 최신 정보만 표시되게 하고 싶습니다.

bash에서는 효과를 얻지만 출력 파일에서는 효과를 얻지 못하는 \r을 시도했습니다.

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를 덮어쓰는 것으로 시작하지만 중지하고 명령을 다시 실행할 때까지 추가되는 출력입니다.

그렇다면 최신 입력만 텍스트 파일에 한 줄로 표시되도록 하는 방법이 있습니까?

감사해요

답변1

당신은 할 수 있습니다print아니면 printf바로 파일로내에서 작성 awk하고 매번 쓸 때마다 닫습니다. 그러면 awk다시 열리고 다음 인쇄에서 잘립니다.

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

(엄밀히 말하면 여기서 경쟁 조건이 발생하며 다른 프로세스가 파일을 읽으려고 시도할 수 있습니다.단지잘라내기와 쓰기 사이에 비어 있는 것처럼 보일 수 있습니다(또는 더 나쁠 수도 있지만 부분적일 가능성은 낮음).

관련 정보