Печатная линия по модулю 1000000 - PullRequest
3 голосов
/ 01 ноября 2011

У меня есть очень большой сжатый файл, который я обрабатываю с использованием grep.

zcat blah.gz | grep -e pattern | gzip -c > pattern.gz

Я бы хотел напечатать что-нибудь в stderr для каждого миллиона обработанных строк ввода, просто чтобы отслеживать прогресс. Есть идеи?

Ответы [ 4 ]

4 голосов
/ 01 ноября 2011

Заменить grep на:

perl -ne 'print if /pattern/; print STDERR "." if $. % 1000000 == 0'
4 голосов
/ 01 ноября 2011

Попробуйте pv. По умолчанию это байты, но есть переключатель, чтобы сделать его строками.

3 голосов
/ 01 ноября 2011

Запустите его через awk:

zcat blah.gz | awk 'BEGIN {x = 1}; {if ((x++ % 1000000) == 0) print x " " $0 > "/dev/stderr"; print $0 }' | grep -e pattern | gzip -c > pattern.gz
1 голос
/ 01 ноября 2011

Инструмент mbuffer(1) может быть чем-то для вас.Цитируем некоторые аннотации:

Инструмент mbuffer используется для буферизации потоков данных и отображения скорости ввода-вывода и сводки для пользователя.Это особенно полезно для записи резервных копий на быстрые ленточные накопители или потоковой передачи по сети.При правильном использовании он может предотвратить переполнение буфера и ускорить весь процесс резервного копирования или передачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...