Команда awk для чтения файла журнала и добавления значений в записи журнала - PullRequest
0 голосов
/ 26 сентября 2019

Я запускаю следующую команду, чтобы отсканировать файл журнала и распечатать строки, которые содержат указанные мной шаблоны.В конце распечатанных строк эта строка кода также предоставляет количество строк (которые имеют шаблоны) в конце вывода.

awk 'BEGIN{count=0} /error/ && /database/ {print ; count++ } END { print count }' ${LOGFILE}

Содержимое файла журнала имеет содержимое, подобноеследующее:

Sep 25 20:18:21 accountsd[377]: notify name LTNCY=200 "SYDRemotePreferencesSourceDidChangeExternally" has been registered 120 times - this may be a leak 
Sep 25 20:18:21 accountsd[377]: notify name LTNCY=200 "com.apple.syncdefaultsd.daemon.wake" has been registered 120 times - this may be a leak

У меня проблемы с тем, что у меня возникла новая ситуация, которую я должен принять во внимание.

  1. Мне также нужно убедиться, что строки содержат шаблон LTNCY=
  2. Получить количество строк, содержащих шаблон LTNCY
  3. ТогдаМне нужно получить все значения каждого LTNCY из каждой строки журнала
  4. Сложить все значения LTNCY из шага # 3 и разделить их на шаг # 2

Я получилнасколько это:

awk 'BEGIN{count=0} /notify.*LTNCY=/ && /may be a leak/ {print ; count++ } END { print count }' ${LOGFILE}

Я знаю, что нужно будет использовать вариант следующей команды:

awk  '{sum+=$1} END {print sum}'

Но у меня возникают проблемы при объединении всего в ОДНУ команду awk.

1 Ответ

2 голосов
/ 26 сентября 2019

Не могли бы вы попробовать следующее.

awk '
/LTNCY/{
  count++
  match($0,/LTNCY=[^ ]*/)
  sum+=substr($0,RSTART+6,RLENGTH-6)+0
}
END{
  print "Sum of LTNCY value is:" sum ORS "Total count of LTYNCY is:" count ORS "Their divide is:" sum/count
}
'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...