linux - 使用 shell 脚本根据日志文件生成报告

标签 linux shell

我必须根据 nagios 日志文件创建报告。我打算为此编写一个 shell 脚本。 日志文件如下:


[1420520400] 当前服务状态:abc.com;service;CRITICAL;HARD;3;OK : OK : 最后 10-01-2015,用户 = 2,员工 = 0

[1420520400] 当前服务状态:def.com;service;CRITICAL;HARD;3;WARNING:最后一次于 10-01-2015,用户 = 2,员工 = 0

[1420520400] 当前服务状态:ghi.com;service;CRITICAL;HARD;3;CRITICAL:最后一次于 2014 年 11 月 19 日,用户 = 2,员工 = 0


我想从这个文件生成如下报告:


名称:abc.com

日期:10-01-2015

用户:2

员工:0


名称:def.om

日期:10-01-2015

用户:2

员工:0


名称:ghi.om

日期:2014-11-19

用户:2

员工:0


如果有人能帮助我实现这一目标,那就太好了。

最佳答案

此命令将为您提供上述输出,只需将日志文件中的文件名从 input.log 更改为实际文件名即可。

$ cat input.log |cut -d';' -f1,6|sed -e 's/\<CURRENT SERVICE STATE\>/NAME=/g'|sed -e 's/\<OK\>//g'|sed -e 's/\<Last on\>/Date =/g'|tr -d ':'|sed 's/WARNING//g'|sed 's/CRITICAL//g'|cut -c 14-|tr -s ' '|tr ',;' '\n'                                                                         

输出:

enter image description here

在这里,我使用了'=',但如果您使用,您可以按照命令更改与上面完全相同的输出,

$ cut -d';' -f1,6 input.log|sed -e 's/\<CURRENT SERVICE STATE\>/NAME=/g'|sed -e 's/\<OK\>//g'|sed -e 's/\<Last on\>/Date =/g'|tr -d ':'|sed 's/WARNING//g'|sed 's/CRITICAL//g'|cut -c 14-|tr -s ' '|tr ',;' '\n' |tr '=' ':'

关于linux - 使用 shell 脚本根据日志文件生成报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27957468/

相关文章:

linux - 如何修复这些 SELinux 策略更改?

php - 我怎样才能提取 drupal-x.x.tar.gz 文件

linux - 结合 grep 和 find 以获得所需的结果

c - 使用 Linux Shell 多次运行客户端-服务器

swift - 使用参数从 swift 应用程序调用 shell

linux - 使 curl 命令 shell 脚本 centOS 超时

linux - 在 shell 脚本中拆分并重命名拆分的文件

linux - 您如何计算和替换文本文件中的字符串,该字符串从一行的末尾开始并继续使用 linux 命令在下一行继续?

linux - 如何使用 File::stat 模块在 Perl 中查找文件夹大小?

linux - awk 仅在 uniq 列中打印行数