Eu gostaria de fazer algo assim:
> grep pattern file.txt | size -h
16.4 MB
ou algo equivalente a:
> grep pattern file.txt > grepped.txt
> ls -h grepped.txt
16.4 MB
> rm grepped.txt
(isso seria um pouco inconveniente)
Isso é possível?
Você pode usar wc
para isso:
grep pattern file.txt | wc -c
contará o número de bytes na saída. Você pode pós-processar isso para converter valores grandes em formato "legível por humanos" .
Você também pode usar pv
para obter essas informações dentro de um pipe:
grep pattern file.txt | pv -b > output.txt
(isso exibe o número de bytes processados, em formato legível por humanos).
wc -c
porquedu -h
retorna `4.0 k` se é qualquer menor que 4,0k como se lê em blocos| wc -c | sed 's/$/\/1024\/1024/' | bc
. Isso anexa/1024/1024
à saída e executa uma calculadora na sequência resultante.Você pode usar a ferramenta pipeviewer
pv
com o sinalizador de contagem total de bytes-b
:fonte
O utilitário Pipe Viewer foi projetado para essa finalidade. Se não for flexível o suficiente para seus propósitos, você poderá implementar seu próprio código de medição de transferência de dados FIFO com as chamadas de função da biblioteca de manipulação de pipeline ( libpipeline ), como
pipeline_pump()
epipeline_peek_size()
.fonte
Pode-se preparar rapidamente sua própria solução em Python:
Funciona assim:
Como no seu caso particular, você está lidando com dados de texto (a julgar pelo fato de ser do qual é o canal
grep
), você também pode usar osbash
'sread
. Algo assim:fonte
wc -c
?while read ...
provavelmente será significativamente mais lento. Além disso, o OP solicitou uma saída legível como em (ls -h
)