파이프 테일, grep 및 컷 문제에 대한 실시간 로그 검사

파이프 테일, grep 및 컷 문제에 대한 실시간 로그 검사

늘어나는 로그를 실시간으로 확인해야 했고, 문제점을 발견하게 되었어요.놓치다일부 줄(정확히 어떤 줄인지 알 수 없음)은 tail -f또는 tailf, grep및 을 사용합니다 cut.

grep특정 단어가 포함된 줄을 필터링하고 cut -c -NUM일부 줄이 매우 길기 때문에 터미널 창에서 줄바꿈하는 것을 원하지 않기 때문에 이것을 사용합니다 .

다음은 다음으로 구성된 샘플 로그를 보는 최소한의 예입니다."라인N"행, 필터 단어"철사", 이 경우 모든 줄이 누락되었습니다(분명히 ^C프로세스를 종료했습니다).

$ tail -n 3 -f log

13th line
14th line
15th line
^C

$ tail -n 3 -f log | grep --color=never 'line'

13th line
14th line
15th line
^C

$ echo $COLUMNS

100

$ tail -n 3 -f log | grep --color=never 'line' | cut -c -$COLUMNS

^C

이런 문제가 발생하니 참고하세요tail -f( 또는 tailf) 와만 grep결합됩니다 .cut. 파이프의 grep중간이나 끝 부분에 사용 하지 않으면 cut줄이 빠지지 않습니다. 또는 tail -f로 바꾸면 문제 없습니다. 가능한 모든 상황을 볼 수 있습니다.tailcat이 더 긴 예.

우분투 13.04를 사용하고 있는데,GNU 핵심 도구( tail, cut) 버전 8.20 및GNU grep2.14.

답변1

귀하의 예에서 문제는 grep과 사이의 버퍼링 입니다 cut. 버퍼가 가득 찬 경우에만 데이터가 파이프 아래로 전달됩니다(내 시스템에서는 4kB).

각 줄 다음에 버퍼를 플러시하도록 --line-buffered추가해 보세요 .grep

관련 정보