Как подсчитать количество экземпляров слова, начинающегося с другого слова

Мне нужно grep журнал ошибок MySQL, начиная с сегодняшней даты, отформатированной так:

 `date +"%y%m%d"` (140710) 

И ищите все экземпляры слова, partitioned на partitioned .

Я пробовал разные вещи безрезультатно. Казалось, это сработало:

 more +/"`date +"%y%m%d"`" mysql-error.log | grep -c partitioned 

Однако, если файл журнала не содержит записей из сегодняшнего дня, вместо того, чтобы возвращать нуль, он ищет весь файл и возвращает номер для всего файла.

Мне нужно, чтобы он возвращал ноль, если нет записей с сегодняшнего дня, а не grep весь файл и подсчет результатов.

Есть ли лучший способ сделать это, используя sed или awk или что-то еще?


С технической точки зрения, я полагаю, что мне нужно подсчитывать: } partitioned { за ним следует строка альфа-числовых символов}}, потому что порция {(без какой-либо строки)} может произойти и не должна учитываться.

Однако это не строгое требование. Я был бы счастлив просто подсчитывать экземпляры слова partitioned .

Вот пример файла журнала:

 140109 12:25:07 [Note] WSREP: view(view_id(PRIM,c4819ddf-7952-11e3-89fc-4f9f1bfa267f,3) memb { c4819ddf-7952-11e3-89fc-4f9f1bfa267f, } joined { } left { } partitioned { f85c2e70-7952-11e3-a759-aa8332246e85, }) 140109 12:25:07 [Note] WSREP: Shifting JOINED -> SYNCED (TO: 85) 

2 Solutions collect form web for “Как подсчитать количество экземпляров слова, начинающегося с другого слова”

С помощью GNU sed anhd grep вы можете попробовать:

 sed -n "/$(date +%y%m%d)/,\$p" file | grep -c partitioned 

/pattern/,$ сопоставил первый шаблон в конце файла.

С вашим вводом:

 $ sed -n "/$(date +%y%m%d)/,\$p" 1.txt | grep -c partitioned 1 

Без соответствующей даты:

 $ sed -n "/$(date +%y%m%d)/,\$p" 1.txt | grep -c partitioned 0 

Вы могли бы попытаться объединить две greps вместе:

 grep `date +"%y%m%d"` mysql-error.log | grep -c partitioned 

Или даже проще:

 grep -c "`date +%y%m%d`.*partitioned" mysql-error.log 

РЕДАКТИРОВАТЬ

Поскольку дата и слово «разделенные» находятся на разных строках, тогда:

 d=$(date +"%y%m%d"); awk '/'$d'/,EOF {print $0}' mysql-error.log | grep -c partitioned 

Или:

 awk '/'$(date +%y%m%d)'/,EOF {print $0}' mysql-error.log | grep -c partitioned 
  • Сценарий для поиска среды рабочего стола по умолчанию?
  • Динамическая переменная в скрипте KornShell
  • Запустите несколько экранов и прикрепите их для разделения изображения
  • скопируйте раздел данных из stdin
  • SSH для входа в систему с помощью pam_exec.so
  • есть способ получить URL из текущей вкладки в google-chrome?
  • Не удается войти в систему после запуска автозапуска службы при запуске
  • код для отображения текста TRUE
  • Сделать неудачный SSH вперед фатальной ошибкой
  • Нажмите кнопку html через скрипт оболочки?
  • Автоматизированный ssh-keygen без кодовой фразы, как?
  • Если имя файла имеет более n символов, удалите последние
  • Linux и Unix - лучшая ОС в мире.