Всем привет!
Мне иногда требуется анализировать большие текстовые файлы, хочется автоматизировать этот процесс. Написал PoC:
% find /usr/bin |head -300 |~/classifier.pl|tail -30
75 /usr/bin/*g
2 /usr/bin/idevice*proxy
2 /usr/bin/tri-*edgeflag
113 /usr/bin/*r
11 /usr/bin/*-config
2 /usr/bin/transmission-*
3 /usr/bin/tri-unfilled-*
4 /usr/bin/Magick*-config
14 /usr/bin/tri-*
29 /usr/bin/*y
19 /usr/bin/l*
2 /usr/bin/mate-*-properties
107 /usr/bin/*s
98 /usr/bin/*d
21 /usr/bin/m*
20 /usr/bin/c*
2 /usr/bin/tri-unfilled-userclip*
3 /usr/bin/x86_64-unknown-linux-gnu-*
108 /usr/bin/*l
2 /usr/bin/x86_64-unknown-linux-gnu-gcc-*
24 /usr/bin/i*
23 /usr/bin/g*
142 /usr/bin/*e
300 /usr/bin*
123 /usr/bin/*p
141 /usr/bin/*t
37 /usr/bin/t*
36 /usr/bin/p*
299 /usr/bin/*
Утилита находит наиболее длинные и общие wildcards и выводит количество совпавших строк stdin. (Звёздочек может быть больше одной).
К сожалению, сложность текущего алгоритма растёт пропорционально квадрату строк. Как подобное написать без квадратичной зависимости? Может есть готовая утилита?