Вопрос или проблема
Внутри папки есть множество подпапок, а внутри подпапок есть множество PDF-файлов. Вот так:
+- SubfolderA
| +- File1.pdf
| +- File2.pdf
|
+- SubfolderB
| +- File3.pdf
| +- File4.pdf
| +- file5.pdf
|
+- SubfolderC
+- File6.pdf
+- File7.pdf
Я хотел бы подсчитать, сколько раз конкретное слово, например, keywordx
, встречается в этих файлах.
- Предпочтительно игнорировать файлы, в которых 0 совпадений.
- И в идеале показать отсортированный список, с файлом с максимальным количеством совпадений, отображаемым первым.
Если у вас установлен pdftotext
(он должен быть в репозиториях большинства дистрибутивов Linux), вы можете конвертировать PDF-файл в текст, использовать grep для поиска шаблона в текстовом файле, а затем удалить его. Что-то вроде этого:
pattern="keywordx"
for file in */*pdf; do
txt=${file/.pdf/.txt}
num=$(pdftotext "$file" 2>/dev/null && grep -c "$pattern" "$txt" && rm "$txt")
[[ $num -gt 0 ]] && echo "$file: $num"
done
Ответ или решение
Вопрос о том, как подсчитать количество вхождений определённого слова в PDF-файлах на вашем компьютере, может показаться сложным, однако с помощью инструментов, таких как pdftotext
и grep
, вы сможете выполнить эту задачу эффективно и быстро. В данном руководстве мы предложим пошаговый подход к решению вашей задачи, а также обсудим дополнительные параметры, которые помогут вам получить искомую информацию без лишних усилий.
Шаг 1: Установка необходимых инструментов
Для начала убедитесь, что у вас установлен пакет poppler-utils
, который содержит утилиту pdftotext
. Она доступна во всех основных дистрибутивах Linux и может быть установлена через менеджеры пакетов. Например, на Ubuntu вы можете выполнить команду:
sudo apt-get install poppler-utils
Шаг 2: Подготовка сценария
После установки необходимых инструментов вы можете использовать следующий Bash-скрипт для поиска слова во всех PDF-файлах в заданных подкаталогах. Скрипт будет преобразовывать каждый PDF-файл в текстовый формат, подсчитывать вхождения указанного слова и выводить только те файлы, в которых слово встречается хотя бы один раз.
pattern="keywordx" # Замените "keywordx" на нужное вам слово
declare -A results # Используем ассоциативный массив для хранения результатов
for file in */*.pdf; do
txt=${file/.pdf/.txt} # Формируем имя текстового файла
pdftotext "$file" "$txt" 2>/dev/null # Преобразуем PDF в текст
num=$(grep -c "$pattern" "$txt") # Подсчитываем вхождения слова
rm "$txt" # Удаляем временный текстовый файл
if [[ $num -gt 0 ]]; then # Если вхождений больше нуля
results["$file"]=$num # Сохраняем файл и количество вхождений
fi
done
# Сортируем и выводим результаты
for file in "${!results[@]}"; do
echo "$file: ${results[$file]}"
done | sort -t':' -k2 -nr # Сортируем по количеству вхождений
Шаг 3: Запуск скрипта
После того как вы скопируете и сохраните этот скрипт в файл, например count_keyword.sh
, не забудьте сделать его исполняемым:
chmod +x count_keyword.sh
Затем запустите его в том же каталоге, где расположены ваши подкаталоги и PDF-файлы:
./count_keyword.sh
Итог
Этот подход позволяет вам быстро и эффективно подсчитать количество вхождений слова во множестве PDF-файлов, игнорируя те файлы, где вхождений нет. Эффективная организация вывода результатов, упорядоченных по количеству вхождений, делает данный метод ещё более удобным.
Используя этот метод, вы получите четкое представление о распространенности интересующего вас слова в различных документах, что может быть особенно полезно при анализе больших объёмов информации. Если у вас есть более специфические требования или вам нужна дополнительная помощь, не стесняйтесь задавать вопросы.