연속적인 출력 줄이 있는 소프트웨어(예: tcpdump 또는 tshark와 같은 트래픽 모니터)를 실행하는 명령을 실행할 때 해당 명령이 화면에서 4, 8, 12... 등과 같은 숫자를 계속 계산한다는 것을 발견했습니다.
command... | awk -F ' ' '{ANY COMMAND}'
내 bash 스크립트가 수천 줄이 아닌 각 출력 줄마다 작업을 수행하길 원합니다. 어떻게 해야 하나요?
많은 출력을 생성하는 소프트웨어를 실행할 때 좋은 예는 다음과 같이 파이프 연산자를 배치할 수 있다는 것입니다.
command... | awk -F ' ' '{print $1}'
0부터 1000+까지의 숫자를 계산한 다음 모든 올바른 정보를 한 번만 인쇄하지만 스크립트가 실행될 때 즉시 인쇄하지는 않습니다.
다음을 사용하여 출력을 파일에 넣으면:
command... > file.txt
...명령이 출력을 제공하면 데이터가 즉시 표시됩니다. 파이프 연산자를 사용할 때 지연의 원인이 무엇인지 궁금합니다.
답변1
이 프로그램( unbiffer
)을 사용하여 프로그램 출력 버퍼링을 중지할 수 있습니다.
unbuffer command... | awk ......
이러한 "지연"의 이유는 UNIX 및 Linux의 대부분의 I/O 작업이 버퍼링되기 때문입니다.