Я хотел бы сделать что-то вроде этого:
> 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
(это было бы немного неудобно, хотя)
Это возможно?
wc -c
потому чтоdu -h
возвращает `4.0 K`, если он меньше, чем 4,0k, поскольку он читается в блоках| wc -c | sed 's/$/\/1024\/1024/' | bc
. Это добавляет/1024/1024
к выводу и запускает калькулятор для полученной строки.Вы можете использовать инструмент pipeviewer
pv
с флагом общего количества байтов-b
:источник
Pipe просмотр утилита была разработана для этой цели. Если он недостаточно гибок для ваших целей, вы можете реализовать свой собственный код измерения передачи данных FIFO с помощью вызовов функций библиотеки манипулирования конвейером ( libpipeline ), таких как
pipeline_pump()
иpipeline_peek_size()
.источник
Можно быстро приготовить собственное решение на Python:
Работает так:
Поскольку в вашем конкретном случае вы имеете дело с текстовыми данными (судя по тому, что вы передаете
grep
), вы также можете использоватьbash
sread
. Что-то вроде этого:источник
wc -c
?while read ...
вероятно будет значительно медленнее. Кроме того, OP запросил удобочитаемый вывод, как в (ls -h
)