免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yyh
打印 上一主题 下一主题

请教这个shell的写法,统计行数 [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
21 [报告]
发表于 2009-07-03 11:10 |只看该作者

回复 #19 yyh 的帖子

用!/^[0-9]/,要有!

论坛徽章:
0
22 [报告]
发表于 2009-07-03 11:12 |只看该作者
  1. awk -F'[ :]+' '/^[A-Z]/{a=$7"|"$2"|"$3"|"} /^[0-9]/{b=a$1"|"$4;++S[b]}END{for(i in S) print i"|"S[i]}' alert
复制代码


日期改为数字不会了 。呵呵

[ 本帖最后由 lucash 于 2009-7-3 11:17 编辑 ]

论坛徽章:
0
23 [报告]
发表于 2009-07-03 11:18 |只看该作者
原帖由 blackold 于 2009-7-3 11:07 发表
添加月份转换(gawk)
awk 'BEGIN{ FS="[: ]+";for(i=1;i



黑哥速度好快啊,这个输出有报错:
awk: Function strftime is not defined.
The source line number is 1.
test.log
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|Jun|28|09|ERROR1|2
2009|Jun|28|10|ERROR1|1
2009|Jun|28|10|ERROR2|1
2009|Jun|29|11|ERROR2|2
2009|Jun|29|15|ERROR3|2
2009|Jun|30|16|ERROR4|3

后面三行输出有误。

论坛徽章:
0
24 [报告]
发表于 2009-07-03 11:21 |只看该作者
原帖由 lucash 于 2009-7-3 11:12 发表
awk -F'[ :]+' '/^[A-Z]/{a=$7"|"$2"|"$3"|"} /^[0-9]/{b=a$1"|"$4;++S}END{for(i in S) print i"|"S}' alert

日期改为数字不会了 。呵呵


日期不是问题,我自己后续处理一下就可以了。
你的结果
2009|Jun|28|10|ERROR1|1
2009|Jun|28|10|ERROR2|1
2009|Jun|29|16|ERROR4|3
2009|Jun|29|15|ERROR3|2
2009|Jun|28|11|ERROR2|2
2009|Jun|28|09|ERROR1|2

是对的,就是顺序乱了。

论坛徽章:
0
25 [报告]
发表于 2009-07-03 11:24 |只看该作者

回复 #24 yyh 的帖子

  1. awk -F'[ :]+' '/^[A-Z]/{a=$7"|"$2"|"$3"|"} /^[0-9]/{b=a$1"|"$4;++S[b]}END{for(i in S) print i"|"S[i]}' alert | sort -t'|' -k4
复制代码


这样不行改成31楼的样子

[ 本帖最后由 lucash 于 2009-7-3 15:45 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2009-07-03 11:30 |只看该作者
原帖由 lucash 于 2009-7-3 11:24 发表
awk -F'[ :]+' '/^[A-Z]/{a=$7"|"$2"|"$3"|"} /^[0-9]/{b=a$1"|"$4;++S}END{for(i in S) print i"|"S}' alert | sort -t'|' -k4


好,搞定了
非常感谢lucash 和黑哥的倾力指导,好好学习了!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
27 [报告]
发表于 2009-07-03 11:33 |只看该作者

回复 #23 yyh 的帖子

你的awk不支持strftime吧。

嗯,确实有问题。gawk
  1. awk 'BEGIN{ FS="[: ]+";for(i=1;i<=12;i++) a[strftime("%b",mktime("2009 "i" 1 00 00 00"))]=sprintf("%02d",i)}!/^[0-9]/{d=$7"|"a[$2]"|"$3"|";next}d $1"|"$4"|"!=p{if(p)print p a[p];p=d $1"|"$4"|"}{a[p]++}END{print p a[p]}' urfile
复制代码

论坛徽章:
0
28 [报告]
发表于 2009-07-03 11:37 |只看该作者
原帖由 blackold 于 2009-7-3 11:33 发表
你的awk不支持strftime吧。

嗯,确实有问题。gawkawk 'BEGIN{ FS="[: ]+";for(i=1;i


对,应该是不支持strftime,谢谢黑哥。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
29 [报告]
发表于 2009-07-03 11:41 |只看该作者
不支持用这个
  1. awk -F '[: ]+' '/^[A-Z]/{d=$7"|"$2"|"$3"|";next}d $1"|"$4"|"!=p{if(p)print p a[p];p=d $1"|"$4"|"}{a[p]++}END{print p a[p]}' urfile
复制代码

不谢。

论坛徽章:
0
30 [报告]
发表于 2009-07-03 11:48 |只看该作者
吃饭回来答题
  1. awk 'NR==FNR{a[$1]=$2}NR>FNR{if ($0~/[0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9]+$/) day=$NF"|"a[$2]"|"$3;else {split($1,M,":");b[day"|"M[1]"|"$2]++}}END{for (i in b) print i"|"b[i]}' <(for i in `seq 1 12`; do LANG=C cal -1 $i 2009 |awk 'NR==1{printf "%s %02d\n",substr($1,1,3),"'$i'";exit}'; done) file |sort -k1,4
复制代码

  1. [root@Mylinux tmp]# awk 'NR==FNR{a[$1]=$2}NR>FNR{if ($0~/[0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9]+$/) day=$NF"|"a[$2]"|"$3;else {split($1,M,":");b[day"|"M[1]"|"$2]++}}END{for (i in b) print i"|"b[i]}' <(for i in `seq 1 12`; do LANG=C cal -1 $i 2009 |awk 'NR==1{printf "%s %02d\n",substr($1,1,3),"'$i'";exit}'; done) file |sort -t"|" -k1,4
  2. 2009|06|28|09|ERROR1|2
  3. 2009|06|28|10|ERROR1|1
  4. 2009|06|28|10|ERROR2|1
  5. 2009|06|28|11|ERROR2|2
  6. 2009|06|29|15|ERROR3|2
  7. 2009|06|29|16|ERROR4|1
  8. 2009|06|29|16|FIFO|2
  9. 2009|06|30|||1
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP