
連続した出力行を持つソフトウェア(tcpdumpやtsharkなどのトラフィックモニタなど)を実行するコマンドを実行すると、そのコマンドが画面上で4、8、12などの数を計算し続けることがわかりました。
command... | awk -F ' ' '{ANY COMMAND}'
私のbashスクリプトが何千もの行ではなく、各出力行に対してアクションを実行したいと思います。どうすればいいですか?
多くの出力を生成するソフトウェアを実行するときの良い例は、次のようにパイプ演算子を配置できることです。
command... | awk -F ' ' '{print $1}'
0 から 1000+ までの数字を計算し、すべての正しい情報を一度だけ印刷しますが、スクリプトの実行時にすぐに印刷するわけではありません。
次のように出力をファイルに入れる場合:
command... > file.txt
...コマンドが出力を提供すると、データはすぐに表示されます。パイプ演算子を使用するときに遅延の原因が何であるか疑問に思います。
答え1
このプログラム(unbiffer
)を使用してプログラム出力のバッファリングを停止できます。
unbuffer command... | awk ......
この「遅延」の理由は、UNIXおよびLinuxのほとんどのI/O操作がバッファリングされるためです。