使用shell脚本基于日志文件生成报告

时间:2015-01-15 05:47:54

标签: linux shell

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


[1420520400]当前服务状态:abc.com;服务;关键;硬; 3;确定:确定:上次于10-01-2015,用户= 2,员工= 0

[1420520400]当前服务状态:def.com;服务;关键;硬; 3;警告:最后于10-01-2015,用户= 2,员工= 0

[1420520400]当前服务状态:ghi.com; service; CRITICAL; HARD; 3; CRITICAL:Last on 2014-11-19,Users = 2,Employees = 0


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


姓名:abc.om

日期:2015年1月10日

用户:2

员工:0


姓名:def.om

日期:2015年1月10日

用户:2

员工:0


姓名:ghi.om

日期:2014-11-19

用户:2

员工:0


如果有人帮助我实现这一目标会很棒。

1 个答案:

答案 0 :(得分: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

在这里,我使用了&#39; =&#39;但是,如果按照以下命令使用

,则可以更改输出与上面完全相同的输出
$ 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 '=' ':'