Antworten:
Sie können dafür verwenden wc
:
grep pattern file.txt | wc -c
zählt die Anzahl der Bytes in der Ausgabe. Sie können dies nachbearbeiten, um große Werte in ein für Menschen lesbares Format zu konvertieren .
Sie können auch verwenden pv
, um diese Informationen in einer Pipe abzurufen:
grep pattern file.txt | pv -b > output.txt
(Dies zeigt die Anzahl der verarbeiteten Bytes in einem für Menschen lesbaren Format an.)
| wc -c | sed 's/$/\/1024\/1024/' | bc
. Dies hängt /1024/1024
an die Ausgabe an und führt einen Taschenrechner für die resultierende Zeichenfolge aus.
Sie können das Pipeviewer-Tool pv
mit dem Flag für die Gesamtbytezahl verwenden -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
Das Pipe Viewer- Dienstprogramm wurde zu diesem Zweck entwickelt. Wenn es für Ihre Zwecke nicht flexibel genug ist, können Sie mit den Funktionsaufrufen der Pipeline-Manipulationsbibliothek ( libpipeline ) wie pipeline_pump()
und Ihren eigenen FIFO- Messcode für die Datenübertragung implementieren 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
$
In Python konnte man schnell seine eigene Lösung brauen:
#!/usr/bin/env python
import sys
count = 0
while True:
byte = sys.stdin.read(1)
if not byte:
break
count = count + 1
print(count)
Funktioniert so:
$ 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
Da in Ihrem speziellen Fall , dass Sie es zu tun mit Textdaten (Geht man von der Tatsache , dass Sie Rohr aus grep
), können Sie auch Gebrauch machen bash
‚s read
. Etwas wie das:
$ echo "Hello" | { while read -n 1 char; do ((count++)) ;done ; echo $count; }
6
wc -c
? while read ...
wird wahrscheinlich deutlich langsamer sein. Außerdem forderte OP eine vom Menschen lesbare Ausgabe wie in ( ls -h
)
wc -c
weildu -h
"4,0 K" zurückgibt, wenn es kleiner als 4,0 K ist, da es in Blöcken liest