![파이핑할 때 'uniq'은 실시간이 아닙니다.](https://linux55.com/image/90443/%ED%8C%8C%EC%9D%B4%ED%95%91%ED%95%A0%20%EB%95%8C%20'uniq'%EC%9D%80%20%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%9D%B4%20%EC%95%84%EB%8B%99%EB%8B%88%EB%8B%A4..png)
내가 달릴 때
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