Что делает команда grep и зачем нужен подсчёт уникальных результатов?

grep - быстрый способ отобрать нужные строки из любого текстового файла. Часто этого достаточно, но в реальной работе требуется понять, как часто конкретный шаблон встречается. Пример: сколько раз в журнале появилось сообщение ERROR: Error code 32.

Ключевые инструменты (GNU coreutils)

Инструмент Что делает Почему нужен
grep Ищет строки, удовлетворяющие регулярному выражению Выдаёт "сырые" совпадения
sort Сортирует строки в лексикографическом или числовом порядке Группирует одинаковые записи рядом
uniq Убирает дубликаты; опция -c выводит количество повторов Превращает список в таблицу "значение - частота"
wc Считает количество строк, слов, байтов Быстрый способ получить общий счёт

Все перечисленные утилиты входят в пакет coreutils и установленны в любой современной Linux‑дистрибуции.

1️⃣ Подсчёт уникальных сообщений об ошибках

Допустим, в файле myfile.log находятся строки вида

ERROR: Error code 8ERROR: Error code 16... ERROR: Error code 32ERROR: Error code 32

Чтобы получить количество вхождений каждого кода, выполните:

grep ERROR myfile.log | sort | uniq -c
  • grep ERROR - оставляем только строки с ERROR;
  • sort - размещаем одинаковые строки рядом;
  • uniq -c - выводим число повторений перед каждой уникальной строкой.

Результат (пример):

   5 ERROR: Error code 8   6 ERROR: Error code 16   7 ERROR: Error code 19  17 ERROR: Error code 32

Сортировка по частоте

Чтобы увидеть, какие коды встречаются чаще всего, добавьте ещё один sort с параметрами -nr (числовая, обратная сортировка):

grep ERROR myfile.log | sort | uniq -c | sort -nr

Вывод будет отсортирован от самого популярного кода к наименее частому.

2️⃣ Подсчёт общего количества совпадений

Если нужно знать сколько строк удовлетворяют условию, но уникальность не важна, достаточно добавить wc -l:

grep "Error code 32" myfile.log | wc -l

Команда выведет лишь число (в примере - 17).

3️⃣ Подсчёт совпадений внутри одной строки

Иногда один файл содержит несколько вхождений искомого шаблона в одной строке. Для их отдельного учёта используем опцию -o (only‑matching):

bash
echo "error error error error" | grep -o error | wc -l

grep -o выводит каждое найденное слово на отдельной строке, после чего wc -l считает их количество (результат - 4).

Подсчёт уникальных совпадений в строке

Если нужно определить, как часто встречаются разные варианты, комбинируем grep -o -e, sort и uniq -c. Пример:

bash
echo "error 1 error 2 error 1 error 2" |  grep -o -e 'error [[:digit:]]' |  sort |  uniq -c

Вывод:

2 error 12 error 2

4️⃣ Практические подсказки (EEAT)

  • Опыт - проверяйте команды в отдельном тестовом файле, чтобы убедиться, что сортировка и подсчёт работают именно так, как ожидается.
  • Экспертность - используйте LC_ALL=C перед sort, если нужны быстрые сортировки без учёта локали: LC_ALL=C sort.
  • Авторитетность - официальная документация GNU coreutils (man‑страницы) подтверждает работу опций -c, -n, -r, -o.
  • Надёжность - при работе с большими журналами добавляйте --line-buffered к grep, чтобы избежать задержек в конвейере.

5️⃣ Мини‑чек‑лист для быстрой диагностики

Задача Команда Что проверяем
Подсчитать уникальные ошибки `grep ERROR file sort
Отсортировать по убыванию `... sort -nr`
Узнать общий счёт grep pattern file | wc -l Количество строк с шаблоном
Подсчитать вхождения в одной строке echo "..." | grep -o pattern | wc -l Количество совпадений внутри строки
Подсчитать уникальные вхождения в строке echo "..." | grep -o -e 'regex' | sort | uniq -c Частоту каждого варианта

Итоги

  • Комбинация grep → sort → uniq - простейший и максимально эффективный способ получить таблицу "значение - частота".
  • Добавление sort -nr позволяет сразу увидеть "топ‑сообщения".
  • wc -l даёт быстрый общий подсчёт без детализации.
  • Опции -o и -e делают возможным подсчёт множественных совпадений в одной строке и работу с регулярными выражениями.

Эти приёмы работают на любой современной Linux‑системе, требуют только базовых утилит и позволяют администратору или разработчику быстро оценить масштаб проблем в журналах, скриптах или логах приложений.

Удачной диагностики!

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *