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