Мне непонятно, должны ли частичные совпадения быть привязаны к началу строки. Если предположить, что ответ «да», может ускорить процесс, так это использование бинарного поиска с помощью почтенной команды look
. Конечно, look
нужно, чтобы его входной файл был отсортирован. Поэтому сначала создайте отсортированную версию исходного файла
sort file > file.sorted
Затем выполните цикл по исходному файлу, look
просматривая по одному слову в отсортированном файле.
while read -r word; do
printf "%s %d\n" "$word" "$(look -b "$word" file.sorted | wc -l)";
done <file
В некоторых системах флаг -b
не требуется передавать в look
для принудительного бинарного поиска. Кэширование отсортированного файла на диске может еще больше ускорить процесс
-regex
— это совпадение всего пути . Попробуйте вместо этого
-regex '.*/Backup-[0-9]{4,}-[0-9]{2}-[0-9]{2}$'