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