パイピングするとき、「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

おすすめ記事