awk命令读取日志文件并在日志条目中添加值

时间:2019-09-26 03:32:39

标签: bash awk

我正在运行以下命令来扫描日志文件并打印出包含我指定的模式的行。在打印出的行的末尾,此代码行还提供了输出末尾的行数(具有模式)。

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. 将第3步中的所有LTNCY值相加,然后将其除以第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 个答案:

答案 0 :(得分:3)

请您尝试以下。

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