파이핑할 때 'uniq'은 실시간이 아닙니다.

파이핑할 때 'uniq'은 실시간이 아닙니다.

내가 달릴 때

for i in {1..2000}; do sleep 0.1 && echo $(netstat -s | grep -i syns); done | uniq

표정 $(netstat -s | grep -i syns)변화를 실시간으로 볼 수 있어요.

그러나 파이프의 출력을 수정하려는 경우:

for i in {1..2000}; do sleep 0.1 && echo $(netstat -s | grep -i syns); done | uniq | while read line; do echo $(date) $line; done

실시간 동작이 손실됩니다. uniq추가 조작, 특히 각 입력 행에 추가된 날짜를 변경하기 위해 출력을 어떻게 사용할 수 있습니까 ?

답변1

어쩌면 버퍼링을 변경해야 할 수도 있습니다.

# buffering totally off
stdbuf -i0 -o0 -e0 command

# buffering per line only
stdbuf -oL -eL command

여기서는 저에게 효과적이었습니다. 결과는 다를 수 있습니다. 작동하지 않으면 다른 명령 앞에 넣으십시오(bash 내장 기능이므로 while이나 read가 아님).

for i in {1..2000}; do
    sleep 0.1 && echo $(netstat -s | grep -i syns)
done \
| stdbuf -oL -eL uniq | while read line; do
    echo $(date) $line
done

관련 정보