Я ищу очень упрощенный алгоритм для фильтрации часто повторяющихся строк из очень большого файла журнала.Структура записей в журнале в основном неизвестна.(Сначала я хотел бы обработать вывод journalctl systemd, но позже я бы хотел использовать его и для других журналов ...) Я вырезал первую часть записей (содержащую метку времени и имя хоста), а затем обработалостальная часть линии.Он может содержать много переменных полей, с идентификатором процесса, другой отметкой времени, порядковым номером и т. Д., С постоянными строками.Например, у меня есть много строк, подобных этим:
anacron[29090]: Updated timestamp for job `cron.daily' to 2018-11-28
anacron[3330]: Updated timestamp for job `cron.daily' to 2018-11-29
anacron[6502]: Updated timestamp for job `cron.daily' to 2018-11-30
anacron[24515]: Updated timestamp for job `cron.daily' to 2018-12-01
anacron[12797]: Updated timestamp for job `cron.daily' to 2018-12-02
или эти:
whoopsie[1827]: [12:29:38] Cannot reach: https://daisy.ubuntu.com
whoopsie[1827]: [12:59:22] Cannot reach: https://daisy.ubuntu.com
whoopsie[1827]: [12:59:23] Cannot reach: https://daisy.ubuntu.com
whoopsie[1827]: [21:22:53] Cannot reach: https://daisy.ubuntu.com
whoopsie[2147]: [17:48:49] Cannot reach: https://daisy.ubuntu.com
whoopsie[2147]: [17:48:49] Cannot reach: https://daisy.ubuntu.com
whoopsie[2147]: [17:48:49] Cannot reach: https://daisy.ubuntu.com
(«много» больше, чем значение, которое будет определено позже, исходя из размерафайл журнала)
Это две группы «похожих» строк.Они фильтруются, если я знаю, где находятся переменные части строк (идентификатор процесса и поле даты в первом примере, pid и время во втором примере), но я не знаю всех возможных вариантов.Источник для меня - черный ящик.Единственная надежная вещь состоит в том, что количество «фиксированных» полей больше, чем переменных.
Я бы хотел их найти (на самом деле я хочу отфильтровать «шум» из журнала), ноПонятия не имею, как это сделать.Я ищу алгоритм, а не инструмент!