늘어나는 로그를 실시간으로 확인해야 했고, 문제점을 발견하게 되었어요.놓치다일부 줄(정확히 어떤 줄인지 알 수 없음)은 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
로 바꾸면 문제 없습니다. 가능한 모든 상황을 볼 수 있습니다.tail
cat
이 더 긴 예.
우분투 13.04를 사용하고 있는데,GNU 핵심 도구( tail
, cut
) 버전 8.20 및GNU grep2.14.
답변1
귀하의 예에서 문제는 grep
과 사이의 버퍼링 입니다 cut
. 버퍼가 가득 찬 경우에만 데이터가 파이프 아래로 전달됩니다(내 시스템에서는 4kB).
각 줄 다음에 버퍼를 플러시하도록 --line-buffered
추가해 보세요 .grep