Squeak.ru - шаблоны программирования

awk ищет строку, если следующие X строк не содержат определенной строки

После моего предыдущего вопроса grep, если следующие X строк не содержит определенной строки Я хотел бы получить помощь, чтобы сделать awk более простым.

Учитывая следующий журнал:

2018-04-04 04:37:41,916 [main] DEBUG com.zaxxer.hikari.HikariConfig - autoCommit......................true
    2018-04-04 04:37:41,916 [main] DEBUG com.zaxxer.hikari.HikariConfig - catalog.........................null
    2018-04-04 04:37:41,916 [main] DEBUG com.zaxxer.hikari.HikariConfig - connectionInitSql...............null
    2018-04-04 04:37:41,916 [main] DEBUG com.zaxxer.hikari.HikariConfig - connectionTestQuery.............null
    2018-04-04 04:48:43,209 [housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - Before cleanup  stats (total=13, active=2, idle=11, waiting=0)
    2018-04-04 05:16:19,226 [housekeeper] DEBUG not-relevant...
    2018-04-04 05:45:28,383 [housekeeper] WARN  com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for com.mysql.jdbc.JDBC4Connection@2f350071, stack trace follows
    java.lang.Exception: Apparent connection leak detected
        at com.sql.HikariConnectionPool.getConnection(java:)
        at com.DBConnection.getConn(java:)
        at com.DBConnection.getConn(java:)
        at com.EAgent.checkER(aaa.java:)
        at com.EAgent$EExecuter.run(aaa.java:)
    2018-04-04 05:55:54,425 [housekeeper] DEBUG not-relevant...
2018-04-04 04:48:13,208 [housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - Before cleanup stats (total=13, active=0, idle=13, waiting=0)
2018-04-04 04:48:13,208 [housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - After cleanup  stats (total=13, active=0, idle=13, waiting=0)
    2018-04-04 05:58:16,814 [DBPool housekeeper] WARN  com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for com.mysql.jdbc.JDBC4Connection@45df031, stack trace follows
    java.lang.Exception: Apparent connection leak detected
        at com.HikariConnectionPool.getConnection(HikariConnectionPool.java:)
        at com.DBConnection.getConn(aaa.java:)
        at com.DBConnection.getConn(aaa.java:)
        at com.m.checkUC(aaa.java:)
        at com.m.run(aaa.java:)
        at java.c.ThreadPoolExecutor.runWorker(aaa.java:)
        at java.c.ThreadPoolExecutor$Worker.run(aaa.java:)
        at java.lang.Thread.run(aaa.java:)
    2018-04-04 04:37:41,921 [main] INFO  com.zaxxer.hikari.HikariDataSource - Started.
    2018-04-04 04:49:43,209 [housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - Before cleanup stats (total=11, active=0, idle=11, waiting=0)
    2018-04-04 04:49:43,209 [housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - After cleanup  stats (total=11, active=0, idle=11, waiting=0)

Мне нужен awk-код, фильтрующий по следующим условиям:
1. Строка начинается с цифр.
2. Содержит: "Ошибка тайм-аута" или "Обнаружение утечки соединения" или "ПРЕДУПРЕЖДЕНИЕ"
3. Не содержит EAgent (исключить - даже если содержит WARN или другой термин из #2)

Таким образом, не нужно будет добавлять в формулу INFO и DEBUG и другие нерелевантные строки лога - она ​​будет автоматически проигнорирована.
(Искать только то, что нам нужно, а не то, что нам не нужно...)

Вывод должен представлять только вторую трассировку стека WARN без «EAgent»:

        2018-04-04 05:58:16,814 [DBPool housekeeper] WARN  com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for com.mysql.jdbc.JDBC4Connection@45df031, stack trace follows
    java.lang.Exception: Apparent connection leak detected
        at com.HikariConnectionPool.getConnection(HikariConnectionPool.java:)
        at com.DBConnection.getConn(aaa.java:)
        at com.DBConnection.getConn(aaa.java:)
        at com.m.checkUC(aaa.java:)
        at com.m.run(aaa.java:)
        at java.c.ThreadPoolExecutor.runWorker(aaa.java:)
        at java.c.ThreadPoolExecutor$Worker.run(aaa.java:)
        at java.lang.Thread.run(aaa.java:)

Спасибо

awk
07.04.2018

  • Насколько я могу судить, мой ответ на ваш предыдущий вопрос уже делает именно то, о чем вы просите. Если нет, и не очевидно, как настроить его так, чтобы он делал то, что вы хотите, то, поскольку вы уже приняли ответ на этот вопрос, опубликуйте новый вопрос, объясняющий, с чем вам нужна помощь. 08.04.2018

Ответы:


1

Не могли бы вы попробовать следовать и дайте мне знать, если это поможет вам.

awk '{line=$0;gsub(/^ +/,"")} /^[0-9]+/{flag=""} /^[0-9]+/ && (/WARN/ || /Timeout failure/ || /Connection leak detection/){flag=1;if(val && val !~ /EAgent/){print val};val=""}  flag{val=val?val ORS line:line} END{if(val){print val}}' Input_file

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

awk '
{
  line=$0;
  gsub(/^ +/,"")
}
/^[0-9]+/{
  flag=""}
/^[0-9]+/ && (/WARN/ || /Timeout failure/ || /Connection leak detection/){
  flag=1;
  if(val && val !~ /EAgent/){
    print val};
  val=""
}
flag{
  val=val?val ORS line:line}
END{
  if(val){
    print val}
}'   Input_file


Объяснение. Теперь также добавлено объяснение кода для понимания и изучения для всех.

awk '
{
  line=$0;                                                                ##Creating variable named line which will have current line value in it.
  gsub(/^ +/,"")                                                          ##using gsub for removing initial space from each line to match.
}
/^[0-9]+/{                                                                ##Checking condition if a line starts with digits then do following.
  flag=""}                                                                ##Nullifying variable flag here.
/^[0-9]+/ && (/WARN/ || /Timeout failure/ || /Connection leak detection/){##Checking if a line starting from 0 to 9 and having either WARN, timeout or leak ones.
  flag=1;                                                                 ##Setting variable named flag value as 1 here.
  if(val && val !~ /EAgent/){                                             ##Checking condition if variable val is NOT NULL and val NOT having string EAgent do follows.
     print val};                                                          ##Printing variable named val here.
  val=""}                                                                 ##Nullifying variable val here.
  flag{                                                                   ##Checking condition if variable flag is NOT NULL here then do following.
     val=val?val ORS line:line}                                           ##Creating variable vale and concatenating its value with own value or have line variable in.
END{                                                                      ##Staring END section of awk code here now.
  if(val){                                                                ##Checking if variable val value is NOT NULL then do following.
     print val}                                                           ##Printing the variable val value here.
}' Input_file                                                    ##Mentioning Input_file name here.
07.04.2018
  • К сожалению, он не отфильтровал результаты - вернулись все WARN. единственное изменение состоит в том, что первая строка пропущена во всех WARN с этим awk. (т.е. без строки цифр, начиная с: java.lang.Exception: обнаружена явная утечка соединения...) 07.04.2018
  • @Haimon, думал, что ты хочешь оставить только WARN строк, пожалуйста, добавь ожидаемый результат в свой пост, тогда я это исправлю. Дайте мне знать, как только вы отредактируете свой пост с ожидаемым результатом. 07.04.2018
  • Уже писал: На выходе должна быть представлена ​​только вторая трассировка стека WARN без EAgent. - Должен быть представлен весь стек остальных WARN, кроме стека с EAgent. Пожалуйста, ЛМК, если что-то не так. 07.04.2018
  • @Haimon, было бы лучше, если бы вы добавили ожидаемый результат в свой пост, тогда это будет более понятно, пожалуйста, сделайте это. 07.04.2018
  • @Haimon, пожалуйста, проверьте мое отредактированное решение и дайте мне знать, поможет ли оно вам? 07.04.2018
  • Работает нормально, но, как я упоминал в № 2, иногда в блоке нет ПРЕДУПРЕЖДЕНИЯ, а только ошибка тайм-аута или обнаружение утечки соединения, можете ли вы добавить или в awk, пожалуйста? 07.04.2018
  • @Haimon, Готово, пожалуйста, проверьте и дайте мне знать, если возникнут вопросы? 07.04.2018
  • @Haimon, добро пожаловать, рад, что это помогло вам, также добавит объяснение в мой код. продолжайте учиться и продолжайте делиться знаниями о SO. 07.04.2018
  • Большое спасибо за вашу помощь и обмен знаниями. 07.04.2018
  • Привет @ RavinderSingh13, я обнаружил проблему с этим awk-скриптом. когда в Input_file есть только один WARN, и этот WARN содержит EAgent, WARN возвращает на выходе - (в то время как в этом случае предполагается, что ничего не возвращается). фильтр работает нормально, только если есть более одного и разных WARN. 08.04.2018
  • Опять же, см. мой ответ на ваш предыдущий вопрос. Вам действительно нужно продумать логику ответов, которые вы рассматриваете, чтобы убедиться, что они делают то, что вы хотите, а не просто принять первый полученный вами ответ, который дает ожидаемый результат из некоторого конкретного образца ввода, который вы предоставили. И если вы не можете следовать логике, то уже одно это стоит вашего внимания! 08.04.2018
  • @ Эд Мортон, спасибо, сэр. Хаймон, я пытался получить полный вопрос и пытался помочь, пожалуйста, просмотрите ответ Эда, сэр, один раз. Продолжай учиться !! 08.04.2018
  • @EdMorton, я изо всех сил старался дать ответ на OP, так как все требования не были приведены вместе, поэтому пропустил это. Я надеюсь, что ОП получит ваш предыдущий ответ, и у нас все будет хорошо. 08.04.2018
  • Равиндер - верно, все, что нам нужно, это то, что разделяет с нами ОП. Дальше дело за ними.... 08.04.2018
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...