Команда Bash для подсчета строк с совпадающими подстроками в двух разных позициях.

Исследуя эту проблему на собственном сервере, я обнаружил следующее:

$ systemctl status man-db.timer
Apr 09 08:10:00 anemone systemd[1]: man-db.timer: Not using persistent file timestamp Mon 2018-04-16 19:40:02 EDT as it is in the future.
Apr 09 08:10:00 anemone systemd[1]: Started Daily man-db cache update.

Выяснилось, что батарея платы RTC -была разряжена, поэтому система загружалась с датой в прошлом (, вероятно, взятой из файловой системы ). Подтверждено запуском

journalctl --boot

И видим, что журналы для текущей загрузки имеют неверные временные метки. Добавляю это на случай, если чья-то еще проблема совпадет с моей.

0
09.03.2020, 00:56
1 ответ

По сути, это можно сделать с помощью

sed -r -n 's/(^.*)(delimiter 1)(.*)(delimiter 2)(.*)(delimiter 3)(.+$)/\1(delimiter)\5/p' <( command that generates debug logs ) | sort | uniq -c | sort -rn

(адаптировано из здесь)

  • .*может слишком много совпадать; sedявляется жадным и хочет найти как можно больше совпадений как можно раньше, поэтому они могут потребоваться, например. отрицания разделителей (, которые могут быть сложными, если у вас есть неудобные разделители)
  • Переход от ^к $важен, если ваше выражение не соответствует всей строке, sedбудет включать несопоставленную часть в вывод
  • Круглые скобки необходимы только вокруг имени класса и имени метода; удаление остальных означает изменение чисел в конце, потому что числа относятся к подвыражениям в скобках по порядку. (Включение их всех позволяет показать больше того, что происходит в выводе sed, например. изменив конец на/\1(delimiter)\5 -- \1\2\3\4\5\6\7/p)
  • sortдолжен выполняться перед uniq -c, потому что uniq -cподсчитывает только прогоны последовательных идентичных строк, не -последовательных идентичных строк получают отдельные подсчеты
  • uniq -cнельзя заменить на sort -u, потому что sort -uтолько отбрасывает дубликаты, но не считает их
  • Финал sortне нужен для ответа на заданный вопрос
  • Да, если вы используете регулярные выражения для решения проблемы, теперь у вас есть две проблемы.
0
28.04.2021, 23:21

Теги

Похожие вопросы