В списке путей файлов в RTF-файле подсчитайте и отсортируйте вывод на основе количества вхождений каждого имени файла.

Вопрос или проблема

У меня есть файл RTF, который содержит список путей к pdf-файлам. Например:

Категория1:
./Папка1/Папка2/1.pdf:18
./Папка3/2.pdf:18
./Папка5/4.pdf:10

Категория2:
./Папка3/2.pdf:18
./Папка5/4.pdf:10

Категория3:
./Папка1/Папка2/1.pdf:18
./Папка5/4.pdf:10

Категория4:
./Папка6/7.pdf:10
./Папка5/4.pdf:10
./Папка3/2.pdf:18

Примечание: Число num после *.pdf:num можно игнорировать. Полный путь к папке тоже можно игнорировать. Объектом интереса является только имя файла.pdf.

Я хотел бы получить отсортированный вывод по именам pdf и количеству их появления.

Вывод будет в формате (имя файла : количество раз, когда файл встречался в rtf), например:

4.pdf :  4
2.pdf :  3

Примечание 2: Любой файл, который упоминается менее 3 раз, можно игнорировать.

Извлеките этот файл, чтобы он стал текстовым файлом, затем выполните

$ sed < TEXT.txt -nre  's,.*/([^:/]+).*,\1,p' | sort | uniq -c
      2 1.pdf
      3 2.pdf
      4 4.pdf
      1 7.pdf

Одним из возможных инструментов является awk. Эта команда может справиться с задачей:

awk -F\/ '/pdf/{split($NF,a,":");b[a[1]]+=1} END {for (i in b) if(b[i]>2) print i" : "b[i]}' input_file

Скрипт использует / в качестве разделителя, затем split помещает последнее поле в a с разделителем :, счетчик записывается в b для вхождений a. На конце выводятся все элементы a, где количество > 2.

Можно упростить, разделив строку, используя разделители / и :. В таком случае скрипт выглядит так:

awk -F'[/:]' '/pdf/{b[$(NF-1)]+=1} END {for (i in b) if(b[i]>2) print i" : "b[i]}' input_file

Ответ или решение

Для решения задачи, связанной с подсчетом и сортировкой файлов на основе их имен в RTF файле, мы представляем пошаговую инструкцию. Основной задачей является извлечение имен файлов из указанных путей, подсчет их повторений и вывод результатов с фильтрацией по количеству появлений.

Шаги для выполнения задачи

  1. Извлечение имен PDF файлов: Для начала нам нужно извлечь имена файлов из файла формата RTF. В вашем случае информация о каждом файле записана в формате путь/к/папке/имя_файла.pdf:число. Мы будем игнорировать полные пути и числа, оставляя только имена файлов.

  2. Подсчет повторений: После того как мы извлекли имена файлов, необходимо подсчитать количество раз, которое каждое имя файла встречается в списке.

  3. Фильтрация по количеству появлений: Далее мы отфильтруем файлы. В соответствии с вашим запросом, будем игнорировать все файлы, названия которых встречаются менее трех раз.

  4. Сортировка и вывод результатов: Наконец, мы отсортируем оставшиеся файлы по количеству их появлений и выведем в заданном вами формате.

Использование инструментария Linux

Вы можете воспользоваться инструментарием Unix/Linux, таким как awk, чтобы эффективно решить эту задачу. Вот пример команды awk, который выполнит вышеуказанные шаги:

awk -F'[/:]' '/pdf/{b[$(NF-1)]+=1} END {for (i in b) if(b[i]>2) print i" : "b[i]}' имя_файла.RTF

Объяснение команды:

  • -F'[/:]': Устанавливаем в качестве разделителей символы / и :. Это значит, что awk будет разбивать строки по этим символам.
  • /pdf/: Проверяет, содержит ли строка слово pdf, что указывает на то, что строка относится к PDF файлу.
  • b[$(NF-1)]+=1: Определяет, что перед последней частью (имя файла) в строке будет подсчитано количество его упоминаний.
  • END {for (i in b) if(b[i]>2) print i" : "b[i]}: В конце перебирает все элементы массива b и выводит имена файлов и их количество, если оно больше двух.

Пример использования

Предположим, ваш файл называется documents.RTF и содержит указанный вами текст. Выполнение команды, приведенной выше, даст следующий результат:

4.pdf : 4
2.pdf : 3

Это значит, что файл 4.pdf встретился 4 раза, а 2.pdf — 3 раза, в соответствии с вашими требованиями.

Заключение

Используя предложенный подход с awk, вы сможете быстро и эффективно провести подсчет и сортировку файлов по их количеству повторений. Этот метод не только сэкономит ваше время, но и произведет результат в нужном вам формате. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться за поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...