Chciałbym zrobić coś takiego:
> grep pattern file.txt | size -h
16.4 MB
lub coś równoważnego do:
> grep pattern file.txt > grepped.txt
> ls -h grepped.txt
16.4 MB
> rm grepped.txt
(byłoby to jednak trochę niewygodne)
Czy to jest możliwe?
Możesz użyć wc
do tego:
grep pattern file.txt | wc -c
policzy liczbę bajtów na wyjściu. Możesz przetworzyć to, aby przekonwertować duże wartości na format „czytelny dla człowieka” .
Możesz także użyć pv
tej informacji do umieszczenia w potoku:
grep pattern file.txt | pv -b > output.txt
(wyświetla liczbę przetworzonych bajtów w formacie czytelnym dla człowieka).
wc -c
ponieważdu -h
zwraca wartość „4,0 K”, jeśli jest mniejsza niż 4,0 tys., Co czyta w blokach| wc -c | sed 's/$/\/1024\/1024/' | bc
. To dołącza/1024/1024
się do wyniku i uruchamia kalkulator na wynikowym ciągu.Możesz użyć narzędzia pipeviewer
pv
z flagą całkowitej liczby bajtów-b
:źródło
W tym celu zaprojektowano narzędzie Pipe Viewer . Jeśli nie jest wystarczająco elastyczny dla twoich celów, możesz zaimplementować własny kod pomiaru transferu danych FIFO za pomocą wywołań funkcji biblioteki manipulacji ( libpipeline ), takich jak
pipeline_pump()
ipipeline_peek_size()
.źródło
W Pythonie można szybko uwarzyć własne rozwiązanie:
Działa tak:
Ponieważ w danym przypadku mamy do czynienia z danymi tekstowymi (sądząc z faktu, że z rury
grep
), można również skorzystać zbash
„sread
. Coś takiego:źródło
wc -c
?while read ...
prawdopodobnie będzie znacznie wolniejszy. Ponadto OP poprosił o przedstawienie czytelne dla człowieka, jak w (ls -h
)