wc
утилита командной строки, часть coreutils любого linux - в один поток считает количество строк/слов/символов в текстовых файлах
разделение слов в файле с помощью xargs, сортировка sort, подсчет уникальных слов uniq -c
cat file | xargs -n 1 | sort | uniq -c
если файлы упакованы, распаковка запускается параллельно с помощью потоков (команда распаковки в stdout | wc )
parallel (одноименный пакет linux) - позволяет максимально просто запускать параллельно несколько процессов (список команд указываются в stdin, по мере необходимости они читаются и запускаются)
На нескольких нодах запускай команду сам.
Итого, любым языком программирования подготавливаешь список команд, обрабатывающих текстовые данные по частям (с учетом их размещения на разных носителях, так как обычно именно они часто являются самым узким местом тут), скармливаешь его parallel и так же своими утилитами читаешь логи на предмет ошибок и результатов.
типа такого:
for a in *.zst;do echo "zstd -d --stdout $a |(printf \"%s\\t\" $a;wc)";done | parallel -j 5
данный код выводит по строчкам имя архива zstd со сжатым текстом и 3 числа, количество строк, слов и символов, параллельно запуская распаковку и подсчет символов в 5 потоков, утилизируя 12 ядер (12-gen intel) по максимуму посчитав 38гб несжатых (4.4гб сжатых) коротких json-файлов (построчно записаны в кучу файлов) за 121сек (узкое место тут распаковка)