回答:
通常のように、一方のコピーを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倍の速さです。(dd
100 MBの/dev/urandom
ファイルを作成し、そのファイルを各メソッドで数回実行しました)
stderrでstdoutのクローンを作成できます。
program | tee /dev/stderr | wc -l
そのようにして、program
のstdoutはパイプさtee
れてstderrに書き込まれ、コンソールに出力されます。tee
また、パイプされたデータをにパイプされたstdoutに書き込みますwc
。
STDOUT_WRITE_COUNT
の最後に変数(例えば)からその値を読み取るか、ファイル/ APIにログを記録します。WDYT?