bbs.ChinaUnix.net
首页 | 微博 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


请教这个shell的写法,统计行数

  首页 » 论坛 » Shell »
[打印] [收藏] [本帖文本页] [推荐此主题给朋友]

我的日志格式为:
09:55:54: ERROR1 /tmp/error/log.3 50 times
09:56:09: ERROR1 /tmp/error/log.14 50 times
10:56:12: ERROR1 /tmp/error/log.14 100 times
10:56:23: ERROR2 /tmp/error/log.5 50 times
11:56:26: ERROR2 /tmp/error/log.1 50 times
11:56:27: ERROR2 /tmp/error/log.5 100 times
15:56:29: ERROR3 /tmp/error/log.1 100 times
15:56:32: ERROR3 /tmp/error/log.1 150 times
16:56:33: ERROR4 /tmp/error/log.6 50 times
16:56:36: ERROR4 /tmp/error/log.6 100 times
16:56:40: ERROR4 /tmp/error/log.12 50 times

我想统计某时段某种类型的告警次数,时段取第一列第一个:之前的字符,告警类型取第二列,值不定,后面的字符可以不管。我想输出结果为:
09时ERROR1告警为2条。
10时ERROR1告警为1条。
10时ERROR2告警为1条。
11时ERROR2告警为2条。
15时ERROR3告警为2条。
16时ERROR4告警为3条。

我的大概思路取时段为awk '{print $1}'|awk -F: '{print $1}',告警条目数用uniq -c
但是整体不会写,请教高手指点,谢谢!
__________________________________
Good good study,day day up!

MSN:yyhww@hotmail.com
QQ:3360317



回复 #1 yyh 的帖子

  1. awk -F'[: ]+' '{a[$1"时"$4]++}END{for(i in a)print i"告警为"a[i]"条."}' ufile
复制代码
__________________________________
有时候回答问题是信口开河......
因此不保证所有回复问题的答案的准确性.
如果正好是对的,那是碰到了死耗子..呵呵.
想着休息,不想做事!



  1. awk -F'[: \t]+' '{a[$1" "$4]++}
  2. END{for(i in a)print i,a[i]}'
复制代码
__________________________________
=GNU/linux=
GNU {bash 2.05b, grep 2.5, Awk 3.1.3, sed 4.0.8}

导师说:站起来吧
众人说:那么辛苦那么艰苦到底值不值?

设计师说:富起来吧
众人说:拼啦





QUOTE:
原帖由 liaosnet 于 2009-7-3 09:59 发表

awk -F'[: ]+' '{a[$1"时"$4]++}END{for(i in a)print i"告警为"a"条."}' ufile


高手就是高手,一下就解决困扰我几天的问题,SHELL真的非常强大,非常感谢!
__________________________________
Good good study,day day up!

MSN:yyhww@hotmail.com
QQ:3360317





QUOTE:
原帖由 waker 于 2009-7-3 10:01 发表
awk -F'[: \t]+' '{a[$1" "$4]++}
END{for(i in a)print i,a}'


测试也可以,非常感谢!
__________________________________
Good good study,day day up!

MSN:yyhww@hotmail.com
QQ:3360317



更进一步的想法,我的日志为
Mon Jun 28 00:00:53 2009
09:55:54: ERROR1 /tmp/error/log.3 50 times
09:56:09: ERROR1 /tmp/error/log.14 50 times
10:56:12: ERROR1 /tmp/error/log.14 100 times
10:56:23: ERROR2 /tmp/error/log.5 50 times
11:56:26: ERROR2 /tmp/error/log.1 50 times
11:56:27: ERROR2 /tmp/error/log.5 100 times
Mon Jun 29 00:00:53 2009
15:56:29: ERROR3 /tmp/error/log.1 100 times
15:56:32: ERROR3 /tmp/error/log.1 150 times
16:56:33: ERROR4 /tmp/error/log.6 50 times
16:56:36: ERROR4 /tmp/error/log.6 100 times
16:56:40: ERROR4 /tmp/error/log.12 50 times
Mon Jun 30 00:00:53 2009

能否做成
2009|06|28|10|FIFO|109
2009|06|29|11|FIFO|1165
__________________________________
Good good study,day day up!

MSN:yyhww@hotmail.com
QQ:3360317



  1. awk -F'[: ]+' '{++S[$1"时"$4"告警"]}END{for (i in S) print i,S[i]"条"}' alert
复制代码
__________________________________
我觉得我还可以抢救一下...............



回复 #6 yyh 的帖子

FIFO从何而来?
__________________________________

LIVE FREE OR DIE!     K.I.S.S.  DRY

远离shell





QUOTE:
原帖由 blackold 于 2009-7-3 10:25 发表
FIFO从何而来?


是告警类型的一种
__________________________________
Good good study,day day up!

MSN:yyhww@hotmail.com
QQ:3360317



回复 #6 yyh 的帖子

10 11
109 1165
从何而来?
__________________________________
shell新手&&awk新手
http://ywlscpl.cublog.cn


Copyright © 2001-2010 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP