나는 이런 일을하고 싶다 :
> 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
사용할 수도 있습니다 . 이 같은:bash
read
$ echo "Hello" | { while read -n 1 char; do ((count++)) ;done ; echo $count; }
6