Yanıtlar:
Bunun için kullanabilirsiniz wc
:
grep pattern file.txt | wc -c
çıktıdaki bayt sayısını sayar. Büyük değerleri “insan tarafından okunabilir” biçime dönüştürmek için bu işlemi sonlandırabilirsiniz .
pv
Bu bilgileri bir kanalın içine almak için de kullanabilirsiniz :
grep pattern file.txt | pv -b > output.txt
(işlenen bayt sayısını insan tarafından okunabilir biçimde görüntüler).
| wc -c | sed 's/$/\/1024\/1024/' | bc
. Bu /1024/1024
, çıktıya eklenir ve elde edilen dize üzerinde bir hesap makinesi çalıştırır.
Pipeviewer aracını pv
toplam bayt sayısı bayrağıyla kullanabilirsiniz -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
Boru Görüntüleyici yarar bu amaçla tasarlanmıştır. Amaçlarınız için yeterince esnek değilse , ve gibi F boru hattı manipülasyon kütüphanesi ( libpipeline ) fonksiyon çağrıları ile kendi FIFO veri transferi ölçüm kodunuzu uygulayabilirsiniz . 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'da hızlı bir şekilde kendi çözümünü oluşturabilir:
#!/usr/bin/env python
import sys
count = 0
while True:
byte = sys.stdin.read(1)
if not byte:
break
count = count + 1
print(count)
Şu şekilde çalışır:
$ 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
Özel durumunuzda metin verileriyle uğraştığınızdan (borsada bulunduğunuzdan yola çıkarak grep
), bash
's read
. Bunun gibi bir şey:
$ echo "Hello" | { while read -n 1 char; do ((count++)) ;done ; echo $count; }
6
wc -c
? while read ...
Muhtemelen daha yavaş olacaktır. Ayrıca, OP ( ls -h
) gibi insan tarafından okunabilir çıktı istedi
wc -c
çünküdu -h
bloklarda okunduğu gibi 4.0k'den küçükse `4.0 K` döndürür