Упражнение: статистика по упоминанию файлов
Основная задача, над репозиторием zsh
Задача
Собрать статистику: сколько раз в проекте упоминаются файлы определенного вида из этого же проекта.
На примере zsh
:
- Склонируйте репозиторий zsh
- Зайдите в каталог
Test
(cd zsh/Test
) - Посчитайте, сколько здесь файлов с именами вида
*.ztst
- Посмотрите: некоторые файлы в каталоге
Test
упоминают.ztst
файлы в своем содержимом, пример:# There are further tests for PRIVILEGED in P01privileged.ztst.
Найдите, из какого файла это пример - Посчитайте статистику:
- сколько
.ztst
файлов ни разу не упоминаются ни в каких файлах в каталогеTest
? - какие именно это файлы?
- какое максимальное количество раз
.ztst
файл упоминается в каталогеTest
? - какой это файл?
- сколько
Детали
zsh на гитхабе: здесь.
Или сразу: git clone https://github.com/zsh-users/zsh.git
Одноименные файлы в разных вложенных каталогах считаем одним и тем же файлом, упоминанием файла считаем вхождение в текст имени файла также без учета каталогов, в которых он находится.
Например: если бы в репозитории zsh
были файлы Test/a/file.ztst
и Test/b/file.ztst
, и в третьем файле содержался бы текст
См. также тесты
a/file.ztst
b/file.ztst
– в статистике хотим увидеть, что файл file.ztst
упоминается 2 раза.
Отдельно хотим посчитать, сколько коллизий по именам файлов встречается (одноименные файлы в разных каталогах).
Погнали?
- Сколько времени заняло решение?
Дополнительная задача: подготовка тестовых данных
Задача
Репозиторий zsh
хорош, но предлагаю также сгенерировать собственные синтетические данные для теста.
В этой части упражнения мне кажется удобно написать скрипт на Perl/Python/Ruby (хотя не обязательно делать всю работу в одном скрипте).
- Создайте случайную структуру из вложенных каталогов
- общее количество каталогов – несколько десятков (но можно и больше)
- глубина вложенности каталогов – до 10 (но можно и больше)
- В случайных местах этой структуры создайте пустые файлы с именами
<случайная строка>.csv
- В случайных местах этой структуры создайте пустые файлы
<случайная строка>.txt
- В случайных
txt
-файлах добавьте имена существующих и несуществующихcsv
-файлов
А теперь посчитайте статистику: сколько csv
-файлов не упоминаются ни в одном txt
-файле,
какой файл упоминается чаще всего и сколько раз.
Так же, как и в основной задаче, файлы рассматриваем без учета каталогов, в которых они находятся, и без учета пути, с которым они упоминаются.
Дополнительная-дополнительная задача
Поменяйте параметры генерации:
- количество каталогов
- максимальная вложенность
- кустистость
- общее количество
csv
иtxt
файлов - распределение количества упоминаний
csv
-файлов
Снова посчитайте статистику.
Погнали?
- Сколько времени заняла подготовка тестовых данных?
- Что оказалось сложнее/интереснее – основная задача или подготовка тестовых данных?