回答:
通常のように、一方のコピーをSTDOUTにtee送信する出力ストリームを分割するために使用できますwc。
program | tee >(wc -l)
これ>(cmd)は、bash構文を実行cmdし、>(cmd)ビットをそのプログラムのSTDINへのパス(名前付きパイプに接続)に置き換えることを意味します。
>(cmd)はksh構文もand によって認識されzsh、を持たないシステムでbashのみ名前付きパイプを使用しています/dev/fd/n。
bashあなたの答えの文言が信じさせることができるので、私はプロセス置換が発明ではなかったことを指摘していました。
sedとas awkが1つの場合に、2つの追加プロセスが生成されます。しかし、teeとwcの両方の非常に(よりはるかに小さい小さいsedとawk)。
sedとawkメソッドの約2倍の速さです。(dd100 MBの/dev/urandomファイルを作成し、そのファイルを各メソッドで数回実行しました)
stderrでstdoutのクローンを作成できます。
program | tee /dev/stderr | wc -l
そのようにして、programのstdoutはパイプさteeれてstderrに書き込まれ、コンソールに出力されます。teeまた、パイプされたデータをにパイプされたstdoutに書き込みますwc。
STDOUT_WRITE_COUNTの最後に変数(例えば)からその値を読み取るか、ファイル/ APIにログを記録します。WDYT?