Извлечение запросов из файла журнала, которые не включают запрещенные строки

У меня есть файл журнала, который выглядит примерно так:

query1 startQuery query1 do something query1 do something else query2 startQuery query1 do something banned query2 do something query3 startQuery query2 endQuery 1000 query3 something else to do query1 endQuery 2003 query3 do something query4 startQuery query4 endQuery 100 query3 endQuery 1434 

Я нахожу самые длинные запущенные запросы:

 > grep "endQuery" logfile | awk '{print $3 " " $1}' | sort -nr | head -n 3 2003 query1 1434 query3 1000 query2 

Тем не менее, есть определенные операции, которые, как известно, длинны, и я хочу найти самые длинные запущенные запросы, которые не включают эти операции. Например, я хочу найти самые длинные запущенные запросы, которых нет в любой из строк журнала, включая слово «banned».

В этом примере он выводит:

 1434 query3 1000 query2 100 query4 

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

2 Solutions collect form web for “Извлечение запросов из файла журнала, которые не включают запрещенные строки”

Во-первых, обратите внимание, что вам не нужен вызов grep , кстати: он может быть легко интегрирован в вызов awk .

 <logfile awk '/endQuery/ {print $3 " " $1}' 

Вы можете отфильтровать заблокированные запросы на этапе awk. Храните текущие запросы в массиве, удаляйте их, если они запрещены, и распечатывайте только неблокируемые.

 <logfile awk ' $2 == "startQuery" {q[$1]=1} # store the names of active queries q[$1] && /banned/ {delete q[$1]} # delete banned queries $2 == "endQuery" { if (q[$1]) print $3, $1; # only report non-banned queries delete q[$1]; } ' | sort -nr | head -n 3 

Мне удалось сформулировать следующее:

 diff <(grep "endQuery" logfile | awk '{print $1}') \ <(grep "banned" logfile | awk '{print $1}') | \ grep "<" | awk '{print $2}' | xargs -I{0} grep "{0} endQuery" logfile | \ awk '{print $3 " " $1}' | sort -nr | head -n3 1434 query3 1000 query2 100 query4 

Тем не менее, это требует grepping через файл журнала 3 раза, что может быть дорогостоящим для больших файлов журнала.

  • Как запустить скрипт для получения определенного содержимого файла
  • Передача параметров PAM в UFW
  • Является ли tty_nr ссылкой в ​​другом месте в GNU / Linux procfs?
  • Confused для пользователя и su в linux
  • Объединение двух разных файлов с условиями
  • Собирайте файлы из нескольких разных каталогов и помещайте их в одно место
  • Извлечь только часть версии пакета с именем bash
  • Можно ли использовать shebang для самого источника файла в текущей среде bash?
  • Уведомление слушателя, странное поведение
  • Файл Java не компилируется в cron
  • Составляйте и загружайте архив tar-файлов в один проход
  • какая оболочка будет использовать sudo для выполнения сценария оболочки без строки shebang
  • Linux и Unix - лучшая ОС в мире.