回答:
wc
これに使用できます:
grep pattern file.txt | wc -c
出力のバイト数をカウントします。それを後処理して、大きな値を「人間が読める」形式に変換することができます。
pv
パイプ内でこの情報を取得するためにも使用できます。
grep pattern file.txt | pv -b > output.txt
(これは処理されたバイト数を人間が読める形式で表示します)。
| wc -c | sed 's/$/\/1024\/1024/' | bc
。これは/1024/1024
出力に追加し、結果の文字列で計算機を実行します。
pv
合計バイトカウントフラグを指定してpipeviewerツールを使用できます-b
。
$ dd if=/dev/zero bs=3 count=4211 2>/dev/null | pv -b >/dev/null
12.3KiB
$ grep pattern file.txt | pv -b >/dev/null
パイプビューアユーティリティは、この目的のために設計されました。目的に対して十分な柔軟性がない場合は、およびなどのパイプライン操作ライブラリ(libpipeline)関数呼び出しを使用して、独自のFIFOデータ転送測定コードを実装できます。 pipeline_pump()
pipeline_peek_size()
$ whatis pv
pv (1) - monitor the progress of data through a pipe
$ pv -Wi 0.002 -cf /etc/hosts | wc -l
367 B 0:00:00 [2.71MiB/s]
[============================================================================>]
100%
10
$
Pythonで独自のソリューションをすばやく作成できます。
#!/usr/bin/env python
import sys
count = 0
while True:
byte = sys.stdin.read(1)
if not byte:
break
count = count + 1
print(count)
そのように動作します:
$ echo "Hi" | ./count_stdin_bytes.py
3
$ echo "Hello" | ./count_stdin_bytes.py
6
$ dd if=/dev/zero bs=1 count=1024 2>/dev/null | ./count_stdin_bytes.py
1024
あなたの特定のケースであなたのテキストデータとしている取引は、(からあなたがパイプその事実から判断するのでgrep
)、あなたはまたの使用作ることができるbash
のをread
。このようなもの:
$ echo "Hello" | { while read -n 1 char; do ((count++)) ;done ; echo $count; }
6
wc -c
か?while read ...
おそらく大幅に遅くなります。また、OPは(のように人間が読める出力を求めたls -h
)
wc -c
のでdu -h
、それはブロック単位で読み込むようには4,0kよりどんな小さい場合リターン`4.0 K '