У меня есть куча *.bz2
файлов, содержащих сжатые текстовые данные.Я распаковываю их в один файл intermediary.txt
для подсчета вхождений подстроки myString
:
find . -name '*bz2' -exec bzip2 -k -c -d {} > intermediary.txt
и затем (для подсчета количества вхождений myString
)
echo "Number of occurrences:"
grep -o "myString" intermediary.txt | wc -w
Обработка затем продолжается некоторыми потоковыми манипуляциями:
cat intermediate.txt | sed ... | sed ... | someCommand > out.txt
Теперь я хочу обработать все шаги в одном конвейере, то есть иметь результат в out.txt
и все еще иметь число вхождений myString
на стандартный вывод без необходимости писать intermediary.txt
.Таким образом, конвейер должен выглядеть примерно так:
find . -name '*bz2' -exec bzip2 -k -c -d {} | <some magic here> | sed ... | sed ... | someCommand > out.txt
(Как) Это возможно?
ОБНОВЛЕНИЕ Я опробовал версию @Charles Duffy ниже, но изменилbzip2
- немного разделить для использования bzcat
.Я думаю, что это немного менее многословно, и это не должно влиять на производительность (хотя не уверен).
Это выполнит работу.Однако было бы неплохо включить этот конвейер в Pipeline Viewer , чтобы получить некоторую обратную связь о прогрессе (файлов *.bz2
очень много!).Префикс всего этого с pv -cN source < ...
не работает.Я разместил отдельный вопрос для этого здесь