Je voudrais faire quelque chose comme ça:
> grep pattern file.txt | size -h
16.4 MB
ou quelque chose d'équivalent à:
> grep pattern file.txt > grepped.txt
> ls -h grepped.txt
16.4 MB
> rm grepped.txt
(ce serait un peu gênant, cependant)
Est-ce possible?
wc -c
parce quedu -h
renvoie `4,0 K` s'il est inférieur à 4,0k car il se lit en blocs| wc -c | sed 's/$/\/1024\/1024/' | bc
. Cela s'ajoute/1024/1024
à la sortie et exécute une calculatrice sur la chaîne résultante.Vous pouvez utiliser l'outil pipeviewer
pv
avec l'indicateur de nombre total d'octets-b
:la source
L' utilitaire Pipe Viewer a été conçu à cet effet. S'il n'est pas suffisamment flexible pour vos besoins, vous pouvez implémenter votre propre code de mesure de transfert de données FIFO avec les appels de fonction de la bibliothèque de manipulation de pipeline ( libpipeline ) tels que
pipeline_pump()
etpipeline_peek_size()
.la source
On pourrait rapidement brasser leur propre solution en Python:
Fonctionne ainsi:
Étant donné que dans votre cas particulier, vous avez affaire à des données textuelles (à en juger par le fait que vous les canalisez
grep
), vous pouvez également utiliserbash
lesread
. Quelque chose comme ça:la source
wc -c
?while read ...
sera probablement beaucoup plus lent. Aussi, OP a demandé une sortie lisible par l'homme comme dans (ls -h
)