原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://oldboy.blog.51cto.com/2561410/1860164

面试题:请过滤oldboy.log中在device: {}里面出现了多少次oldboy,过滤并统计出来。

考虑到面试题的企业里的通用性,即一行还可能有多个oldboy,即原题改为如下:

[oldboy@oldboy ~]$ cat oldboy.log

oldboy is a linuxer.

device: {

oo

oldboy oldboy oldboy

no sql

this is log

niu niu

}

oldboy

device: {

oldboy oldboy

no sql

this is log

niu niu

}

oldboy oldboy

device: {

oldboy oldboy

no sql

this is log

niu niu

}

device: {

oldboy oldboy

no sql

this is log

niu niu

}

oldboy

因此本题最佳答案,老男孩老师从学生的解答中选举优秀答案如下:

sed -n '/^device/,/\}$/p' oldboy.log|xargs -n 1|sort|grep-w oldboy|wc -l

awk '/device: {/, /}/' oldboy.log|grep -w oldboy|tr" " "\n"|wc -l

awk '/{/,/}/{a+=gsub("oldboy","")}END{print a}' oldboy.log

sed -n '/{/,/}/{/oldboy/p}'  oldboy.log | tr ' ' '\n' | wc -l

演示:

[oldboy@oldboy ~]$ sed -n '/^device/,/\}$/p'oldboy.log|xargs -n 1|sort|grep -w oldboy|wc -l

9

[oldboy@oldboy ~]$ awk '/device: {/, /}/' oldboy.log|grep-w oldboy|tr " " "\n"|wc -l

9

[root@littleboy ~]# awk '/{/, /}/{a+=gsub("oldboy","")}END{printa}' oldboy.log

9

[root@littleboy ~]# sed -n '/{/,/}/{/oldboy/p}'oldboy.log|tr ' ' '\n'| wc -l

9

普通人员可以就题论题,高手的解答多考虑通用性,高手和低手的差别就在于此!


本文出自 “老男孩linux培训” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/1860164