파이프라인 데이터의 크기를 측정하는 방법은 무엇입니까?

파이프라인 데이터의 크기를 측정하는 방법은 무엇입니까?

나는 이런 일을하고 싶다 :

> grep pattern file.txt | size -h
16.4 MB

또는 이에 상응하는 것:

> grep pattern file.txt > grepped.txt
> ls -h grepped.txt
16.4 MB
> rm grepped.txt

(근데 좀 불편할 듯)

그게 가능합니까?

답변1

다음을 위해 사용할 수 있습니다 wc:

grep pattern file.txt | wc -c

출력의 바이트 수가 계산됩니다. 후처리하시면 됩니다큰 값을 "사람이 읽을 수 있는" 형식으로 변환.

당신은 또한 사용할 수 있습니다pv파이프라인 내에서 이 정보를 얻으려면 다음을 수행하십시오.

grep pattern file.txt | pv -b > output.txt

(사람이 읽을 수 있는 형식으로 처리된 바이트 수를 표시합니다.)

답변2

파이프라인 뷰어 도구를 사용할 수 있습니다.pv총 바이트 수가 표시된 플래그 -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

답변3

이것파이프 뷰어유틸리티는 이러한 목적으로 설계되었습니다. 목적에 맞게 충분히 유연하지 않은 경우 파이프 조작 라이브러리(도서관 파이프라인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
$

답변4

사람들은 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사용할 수도 있습니다 . 이 같은:bashread

$ echo "Hello" | { while read -n 1 char; do ((count++)) ;done ; echo $count; }
6

관련 정보