免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4686 | 回复: 11
打印 上一主题 下一主题

[文本处理] /var/log/messages的处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-10-17 16:51 |只看该作者 |倒序浏览
新人第一次发帖求助
在处理messages时候遇到了问题;
需求是不考虑时间,重复的错误只显示一次,我的做法是:
  1. cat /var/log/messages |egrep "error|fail|move" |cut -c 17- |sort |uniq -c
复制代码
这样大概的输出是:

      4 pxe-suse mcelog: Family 6 Model 4e CPU: only decoding architectural errors
      1 pxe-suse sftp-server[29778]: error: Unknown extended request "fs-multiple-roots-supported@vandyke.com"
      1 pxe-suse sftp-server[29778]: error: Unknown extended request "openex@vandyke.com"
      1 pxe-suse sftp-server[29778]: error: Unknown extended request "vendor-id"
      1 pxe-suse sftp-server[5877]: error: Unknown extended request "fs-multiple-roots-supported@vandyke.com"
      1 pxe-suse sftp-server[5877]: error: Unknown extended request "openex@vandyke.com"
      1 pxe-suse sftp-server[5877]: error: Unknown extended request "vendor-id"

这样同时也能统计出重复次数,但现在问题是,这样就不能显示每条错误之前的时间了。
怎么做才能显示出每条错误的时间,对于重复多次的,显示第一次和最后一次的时间。
有没有大神来帮忙。。

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
2 [报告]
发表于 2017-10-17 18:15 |只看该作者
本帖最后由 wh7211 于 2017-10-18 15:43 编辑

回复 1# liyichenbeu


文件1内容如下:
Oct 11 08:00:00 aaa 111 111
Oct 12 09:00:00 bbb 222 222 222
Oct 13 10:00:00 pxe-suse mcelog: Family 6 Model 4e CPU: only decoding architectural errors
Oct 13 11:00:00 pxe-suse mcelog: Family 6 Model 4e CPU: only decoding architectural errors
Oct 14 12:00:00 pxe-suse mcelog: Family 6 Model 4e CPU: only decoding architectural errors
Oct 15 13:00:00 pxe-suse mcelog: Family 6 Model 4e CPU: only decoding architectural errors
Oct 15 14:00:00 pxe-suse sftp-server[29778]: error: Unknown extended request "fs-multiple-roots-supported@vandyke.com"
Oct 16 15:00:00 pxe-suse sftp-server[29778]: error: Unknown extended request "openex@vandyke.com"
Oct 16 16:00:00 pxe-suse sftp-server[29778]: error: Unknown extended request "vendor-id"
Oct 16 17:00:00 pxe-suse sftp-server[5877]: error: Unknown extended request "fs-multiple-roots-supported@vandyke.com"
Oct 16 18:00:00 pxe-suse sftp-server[5877]: error: Unknown extended request "openex@vandyke.com"
Oct 16 19:00:00 pxe-suse sftp-server[5877]: error: Unknown extended request "vendor-id"
Oct 16 20:00:00 ccc 333 333 333 333
Oct 16 21:00:00 ddd 444 444 444 444 444

awk4.0+
  1. awk '/error/{patsplit($0,s,/([0-9]{2}:){2}[0-9]{2}/,t);a[t[1]]++;if(!b[t[1]]++){c[t[1]]=t[0]s[1]};d[t[1]]=t[0]s[1]}END{PROCINFO["sorted_in"]="@val_num_asc";for(i in c){print c[i]" | "d[i],a[i],i}}' 1
复制代码
  1. awk '/error/{y="^(.*([0-9]{2}:){2}[0-9]{2}) +(.*)$";match($0,y,t);a[t[3]]++;if(!b[t[3]]++){c[t[3]]=t[1]};d[t[3]]=t[1]}END{PROCINFO["sorted_in"]="@val_num_asc";for(i in c){print c[i]" | "d[i],a[i],i}}' 1
复制代码

输出按开始时间升续排列:
Oct 13 10:00:00 | Oct 15 13:00:00 4 pxe-suse mcelog: Family 6 Model 4e CPU: only decoding architectural errors
Oct 15 14:00:00 | Oct 15 14:00:00 1 pxe-suse sftp-server[29778]: error: Unknown extended request "fs-multiple-roots-supported@vandyke.com"
Oct 16 15:00:00 | Oct 16 15:00:00 1 pxe-suse sftp-server[29778]: error: Unknown extended request "openex@vandyke.com"
Oct 16 16:00:00 | Oct 16 16:00:00 1 pxe-suse sftp-server[29778]: error: Unknown extended request "vendor-id"
Oct 16 17:00:00 | Oct 16 17:00:00 1 pxe-suse sftp-server[5877]: error: Unknown extended request "fs-multiple-roots-supported@vandyke.com"
Oct 16 18:00:00 | Oct 16 18:00:00 1 pxe-suse sftp-server[5877]: error: Unknown extended request "openex@vandyke.com"
Oct 16 19:00:00 | Oct 16 19:00:00 1 pxe-suse sftp-server[5877]: error: Unknown extended request "vendor-id"

论坛徽章:
2
2016科比退役纪念章
日期:2017-09-30 10:47:3315-16赛季CBA联赛之福建
日期:2017-10-13 09:46:21
3 [报告]
发表于 2017-10-18 10:42 |只看该作者
本帖最后由 william_djj 于 2017-10-18 14:50 编辑

回复 1# liyichenbeu

mes.awk脚本如下
  1. /error|fail/{       time="";
  2.         error="";
  3.         for(i=1;i<=3;++i)
  4.         {
  5.                 time=(time" "$i);
  6.         }

  7.         for(i=4;i<=NF;++i)
  8.         {
  9.                 error=(error" "$i);
  10.         }
  11.         if(start[error]=="")
  12.                 start[error]=time;
  13.         else
  14.                 end[error]=time;
  15. }
  16. END{    for(i in start)
  17.                 {
  18.                         print start[i], i;
  19.                         if(end[i])
  20.                                 print end[i], i;
  21.                 }
  22. }
复制代码



运行:
awk -f mes.awk /var/log/messages





论坛徽章:
0
4 [报告]
发表于 2017-10-18 13:09 |只看该作者
回复 2# wh7211

谢谢!这个可真是长啊,但是我执行时候出现问题了,出现如下提示:
awk: warning: regexp constant for parameter #3 yields boolean value
awk: (FILENAME=1 FNR=116) fatal: function `patsplit' not defined


如果可以讲的话,可否讲一下您的思路?

论坛徽章:
0
5 [报告]
发表于 2017-10-18 13:09 |只看该作者
回复 2# wh7211

谢谢!这个可真是长啊,但是我执行时候出现问题了,出现如下提示:
awk: warning: regexp constant for parameter #3 yields boolean value
awk: (FILENAME=1 FNR=116) fatal: function `patsplit' not defined
如果您有时间的话,可否方便讲一下您的思路?

论坛徽章:
0
6 [报告]
发表于 2017-10-18 13:11 |只看该作者
回复 2# wh7211

真的很谢谢!这个可真是长啊,但是我执行时候出现问题了,出现如下提示:
awk: warning: regexp constant for parameter #3 yields boolean value
awk: (FILENAME=1 FNR=116) fatal: function `patsplit' not defined
如果您有时间的话,方便讲一下思路吗?

论坛徽章:
0
7 [报告]
发表于 2017-10-18 13:11 |只看该作者
回复 2# wh7211

真的很谢谢!这个可真是长啊,但是我执行时候出现问题了,出现如下提示:
awk: warning: regexp constant for parameter #3 yields boolean value
awk: (FILENAME=1 FNR=116) fatal: function `patsplit' not defined

如果您有时间的话,方便讲一下思路吗?

论坛徽章:
0
8 [报告]
发表于 2017-10-18 13:17 |只看该作者
回复 3# william_djj

谢谢!执行后输出似乎并没有过滤出error,而且时间顺序似乎比较混乱,方便的话,能否讲一下您的思路?谢谢!

论坛徽章:
2
2016科比退役纪念章
日期:2017-09-30 10:47:3315-16赛季CBA联赛之福建
日期:2017-10-13 09:46:21
9 [报告]
发表于 2017-10-18 14:53 |只看该作者
本帖最后由 william_djj 于 2017-10-18 14:56 编辑

回复 8# liyichenbeu

再改了下, 第一行加入/error|fail/就是过滤了。按你要求,每个错误最多只有两条输出,分别用start和end数组记录下来,end数组取的是最后出现那条错误。

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
10 [报告]
发表于 2017-10-18 15:36 |只看该作者
本帖最后由 wh7211 于 2017-10-18 15:41 编辑

回复 4# liyichenbeu


出现这个报错是因为你的awk版本过低导致的,你可以升级awk版本到4.0+,下面命令显示awk版本号。
awk --version
GNU Awk 4.1.3, API: 1.1

如果无法升级awk版本,可以使用如下代码,不过没有顺序输出:
  1. awk --re-interval '/error/{y="^(.*([0-9]{2}:){2}[0-9]{2}) +(.*)$";match($0,y,t);a[t[3]]++;if(!b[t[3]]++){c[t[3]]=t[1]};d[t[3]]=t[1]}END{for(i in c){print c[i]" | "d[i],a[i],i}}' 1
复制代码

输出:
Oct 16 18:00:00 | Oct 16 18:00:00 1 pxe-suse sftp-server[5877]: error: Unknown extended request "openex@vandyke.com"
Oct 16 17:00:00 | Oct 16 17:00:00 1 pxe-suse sftp-server[5877]: error: Unknown extended request "fs-multiple-roots-supported@vandyke.com"
Oct 16 19:00:00 | Oct 16 19:00:00 1 pxe-suse sftp-server[5877]: error: Unknown extended request "vendor-id"
Oct 15 14:00:00 | Oct 15 14:00:00 1 pxe-suse sftp-server[29778]: error: Unknown extended request "fs-multiple-roots-supported@vandyke.com"
Oct 16 15:00:00 | Oct 16 15:00:00 1 pxe-suse sftp-server[29778]: error: Unknown extended request "openex@vandyke.com"
Oct 13 10:00:00 | Oct 15 13:00:00 4 pxe-suse mcelog: Family 6 Model 4e CPU: only decoding architectural errors
Oct 16 16:00:00 | Oct 16 16:00:00 1 pxe-suse sftp-server[29778]: error: Unknown extended request "vendor-id"

简单解释一下:
  1. a[t[3]]++ 统计错误信息出现的次数
  2. c[t[3]] 错误信息第一次出现的时间
  3. d[t[3]] 错误信息最后一次出现的时间
  4. print c[i]" | "d[i],a[i],i 打印错误信息第一次出现的时间,最后一次出现的时间,出现的次数,内容
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP