입력이 업데이트될 때마다 출력 파일을 덮어쓰는 방법

입력이 업데이트될 때마다 출력 파일을 덮어쓰는 방법

직렬 입력(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의 출력을 덮어쓴 다음 중지하고 명령을 다시 실행할 때까지 추가하면 됩니다.

그렇다면 최신 입력을 텍스트 파일에서 한 줄로만 표시할 수 있는 방법이 있습니까?

감사해요

답변1

당신은 할 수print아니면 printf직접 파일로그 안에 awk넣고 각 쓰기 후에 닫으십시오. awk다음에 인쇄할 때 다시 열리고 잘립니다 .

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

(엄밀히 말하면 여기에 경쟁 조건이 있으며 다른 프로세스가 파일을 읽으려고 시도할 수 있습니다.오직잘라내기와 쓰기 사이에 있으므로 비어 있는 것처럼 보입니다(또는 더 나쁘지만 부분적이지는 않을 것임). )

관련 정보