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
我遇到的麻烦是,我有一个需要考虑的新情况。
- 我还需要确保线条包含模式
LTNCY=
- 获取包含
LTNCY
模式的行数 - 然后我需要
LTNCY
从每个日志行中获取每个值的所有值 - 将第 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 命令中。
解决方案
请您尝试以下操作。
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
推荐阅读
- unity3d - 为什么我在 DoTween 序列的 AppenCallBack 中的方法永远不起作用
- python - Pydantic 是否可以动态更改对象的表示?
- javascript - 如何通过 JavaScript 使用浏览器录制声音?
- logstash - Logstash 混合日志解析
- android - Retrofit 2 无法为我的 kotlin 类创建转换器
- powershell - 将文件发送到远程文件夹powershell
- python - 根据其他 DataFrame 填充日期内的值
- java - 如何使用 jaxb 从多个 WSDL 文件生成类
- amazon-web-services - Amplify 发布通过放大发布命令构建失败
- r - 正则表达式分组和重新排序