Программы
10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 8 — подсчёт с grep

10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 8 — подсчёт с grep

Восьмая часть перевода статьи «Learn 10 good UNIX usage habits» от IBM. В этой части рассмотрим возможности утилиты grep.

Восьмая часть перевода статьи «Learn 10 good UNIX usage habits» от IBM. В этой части рассмотрим возможности утилиты grep.

8. Знайте, когда grep может считать, а когда это стоит оставить другим.

Избегайте комбинирования grep и wc -l для подсчёта строк вывода. У команды grep есть ключ -c специально для этого. В большинстве случаев он быстрее, чем передавать вывод дальше, а считать утилитой wc:

~ $ time grep and tmp/a/longfile.txt | wc -l
2811

real 0m0.097s
user 0m0.006s
sys 0m0.032s
~ $ time grep -c and tmp/a/longfile.txt
2811

real 0m0.013s
user 0m0.006s
sys 0m0.005s

Плюсом к скорости ключ -c ещё и зачастую удобнее.  При работе со списком файлов grep -c выводит количество вхождений строки поиска по каждому файлу. В то время, как wc даст только общее количество.

Однако, этот пример демонстрирует ещё одну распространённую ошибку. Такой способ подсчёта даёт лишь количество строк, в которых находится искомая подстрока. И если вам это и нужно, то это хорошо. Если же вам нужно найти количество вхождений искомой подстроки — возможны ошибки, ведь искомая строка может встречаться несколько раз в одной и той же строке…

Пример:

And if you save yourself
You will make him happy
He’ll keep you in a jar
And you’ll think you’re happy
He’ll give you breathing holes
And you’ll think you’re happy
He’ll cover you with grass
And you’ll think you’re happy now

Здесь «you» встречается 12 раз. Но оба вышеприведённых варианта выведут 8 — в восьми строках она встречается (стоит добавить ключ -i для игнорирования регистра букв).

Чтобы избежать этой ошибки, используйте ключ -o — на каждое вхождение искомой подстроки она будет выведена.

$ grep -oi you <<SONG
And if you save yourself
You will make him happy
He'll keep you in a jar
And you'll think you're happy
He'll give you breathing holes
And you'll think you're happy
He'll cover you with grass
And you'll think you're happy now
SONG

you
you
You
you
you
you
you
you
you
you
you
you

Да, мы добавили ещё ключ -i для игнорирования регистра.

Но с ключом -o не работает ключ -c. Так что в этом случае нам всё же стоит посчитать результат с помощью wc -l

~ $ grep -o and tmp/a/longfile.txt | wc -l
 3402
Также может быть вам интересно:

10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 7 — xargs

В седьмой части статьи «Learn 10 good UNIX usage habits» от IBM мы рассмотрим некоторые возможности xargs.

Читать »

Должен ли программист быть нацелен на гешефт?

tl;dr: Как бы да, но нет.

Читать »
Фото Как сделать свою middleware в Django (с примерами)

Как сделать свою middleware в Django (с примерами)

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

Фото Как настроить отправку почты из Django

Как настроить отправку почты из Django

Письма об ошибках, отчёты на почту, восстановление паролей - всё это полезно при работе с сайтом. Django предоставляет удобный способ это сделать с минимумом настроек!

Фото Добавляем поддержку медиа-файлов в Django проект

Добавляем поддержку медиа-файлов в Django проект

Современные сайты редко ограничиваются только текстом и вёрсткой. Часто в заметках красуются фотографии, а рядом с описанием товаров - их изображения.

Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

Во время работы программы часто нужно сохранять некоторые важные записи о процессе выполнения команды. В Python есть довольно мощный модуль для работы с логами - давайте разберёмся с тем, как его использовать.

Фото Нет слов, одни... однострочники

Нет слов, одни... однострочники

На днях вышел пост со списком полезных однострочников для JavaScript программистов. Памятуя Perl-овую молодость, заглянул туда.

Фото Microsoft открывает исходники, а её IDE супер-популярна

Microsoft открывает исходники, а её IDE супер-популярна

Решил сложить пару фактов и немного над этим поразмыслить. Реально ли Microsoft "переобулись"?

Фото Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если одни и те же данные нужны в разных местах, лучше сделать свой контекст-процессор.

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.