tail+grep+cut 조합이 작동하지 않는 이유는 무엇입니까? [복사]

tail+grep+cut 조합이 작동하지 않는 이유는 무엇입니까? [복사]

로그를 추적하는 동안 일부 로그를 grep하고 줄이 너무 길기 때문에 각 줄의 일부만 인쇄하고 싶습니다.

내가 사용하고 있는 조합이 왜 작동하지 않는지 이해할 수 없습니다. 절차는 다음과 같습니다.

echo 'Jun 29 16:27:00 someip rails[pid]: Killed a transaction
Jun 29 16:28:00 someip rails[pid]: Killed a transaction' > /tmp/test

# Shows the lines
tail -f /tmp/test | grep Killed

# Shows the lines
grep Killed /tmp/test | cut -c -43

# Shows the lines
cat /tmp/test | grep Killed | cut -c -43

# Doesn't show them
tail -f /tmp/test | grep Killed | cut -c -43

마지막 조합이 작동하지 않는 이유는 무엇입니까?

답변1

댓글에서 지적했듯이 문제는 버퍼링으로 인해 발생합니다. 당신이 할 수 있는 일은 stdbuf표시된 대로 명령을 실행하는 것입니다 .여기.

stdbuf -i0 -o0 -e0 tail -f /tmp/test | grep Killed | cut -c -43

grep그런데 아마도 및 파이프를 제거 cut하고 다음을 사용할 수 있습니다.

stdbuf -i0 -o0 -e0 tail -f /tmp/test | awk '/Killed/{print substr($0,length($0)-43)}'

관련 정보