Что делает команда 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):
echo "error error error error" | grep -o error | wc -l
grep -o выводит каждое найденное слово на отдельной строке, после чего wc -l считает их количество (результат - 4).
Подсчёт уникальных совпадений в строке
Если нужно определить, как часто встречаются разные варианты, комбинируем grep -o -e, sort и uniq -c. Пример:
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‑системе, требуют только базовых утилит и позволяют администратору или разработчику быстро оценить масштаб проблем в журналах, скриптах или логах приложений.
Удачной диагностики!
