Jawaban:
Anda dapat menggunakan wc
ini:
grep pattern file.txt | wc -c
akan menghitung jumlah byte dalam output. Anda dapat memposting proses itu untuk mengonversi nilai besar ke format “dapat dibaca manusia” .
Anda juga dapat menggunakan pv
untuk mendapatkan informasi ini di dalam pipa:
grep pattern file.txt | pv -b > output.txt
(ini menampilkan jumlah byte yang diproses, dalam format yang dapat dibaca manusia).
| wc -c | sed 's/$/\/1024\/1024/' | bc
. Ini ditambahkan /1024/1024
ke output dan menjalankan kalkulator pada string yang dihasilkan.
Anda dapat menggunakan alat pipeviewer pv
dengan flag jumlah byte total -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
The Pipe Viewer utilitas dirancang untuk tujuan ini. Jika tidak cukup fleksibel untuk keperluan Anda, maka Anda dapat menerapkan kode pengukuran transfer data FIFO Anda sendiri dengan pemanggilan fungsi library manipulation pipeline ( libpipeline ) seperti pipeline_pump()
dan 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
$
Orang dapat dengan cepat membuat solusi mereka sendiri dengan 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)
Bekerja seperti itu:
$ 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
Karena dalam kasus tertentu Anda berurusan sedang dengan data teks (kalau dilihat dari kenyataan bahwa Anda pipa dari grep
), Anda bisa juga menggunakan bash
's read
. Sesuatu seperti ini:
$ echo "Hello" | { while read -n 1 char; do ((count++)) ;done ; echo $count; }
6
wc -c
? while read ...
mungkin akan secara signifikan lebih lambat. Juga, OP meminta output yang dapat dibaca manusia seperti pada ( ls -h
)
wc -c
karenadu -h
mengembalikan `4.0 K` jika lebih kecil dari 4.0k karena terbaca dalam blok