daily tip 2015-10-28

oldboy.log
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html
今天分享的是一道挺正常的题,文件为oldboy.log.当然了,这个题目还是从老男孩老师那得到的。
老男孩老师也给出了解答,我给自己记一个笔记。就这样。
老男孩老师的博客是http://oldboy.blog.51cto.com/
按要求处理文件,将域名取出并计数
      3 www.etiantian.org
      2 post.etiantian.org
      1 mp3.etiantian.org
最后一般的结果是这样的。
我就先说一说我的看法,最近也是刚刚正式学习Linux的各种工具。
这一阵学习的主要是grep、awk、sed、以及一些常用的工具,至于awk的一些内置函数什么的我还没有
详细的学习。
首先我就说一下我觉得最简单的方法,就是awk
1.
root@lp:/tmp# cat oldboy.log|awk -F "/" '{print $3}'|sort -r|uniq -c
      3 www.etiantian.org
      2 post.etiantian.org
      1 mp3.etiantian.org
它的结构很清晰,老师说过,三剑客任何一个都可以直接处理文件,不用先cat然后管道
我那一阵是做的复制然后正好查看一下复制的内容,后来操作就直接按上一个命令来了,
有点懒,不推荐哈

awk -F 指定分割符,分割符用双引号。但是刚才我试了一下,不用双引号一样可以。
后面是一对单引号,这个没有不行,如果是打了双引号,双引号和后面那个单引号一定有一个空格
不然就是这样
root@lp:/tmp# cat oldboy.log|awk -F "/"'{print $3}'|sort -r|uniq -c
root@lp:/tmp#
没有结果输出,这个一定要记住
sort

root@lp:/tmp# cat tmp
111
222
111
222
222
333
111
root@lp:/tmp# cat tmp |sort
111
111
111
222
222
222
333
root@lp:/tmp# cat tmp |sort -r
333
222
222
222
111
111
111

sort就是这个作用,后面的-r是反转的意思

uniq

root@lp:/tmp# cat tmp |sort -r|uniq
333
222
111
root@lp:/tmp# cat tmp |sort -r|uniq -c
      1 333
      3 222
      3 111

一个用来统计的工具。重点就是如何把域名取出来

接下来我把那个cut的一个简单的方法贴出来

root@lp:/tmp# cat oldboy.log|cut -d / -f3
www.etiantian.org
www.etiantian.org
post.etiantian.org
mp3.etiantian.org
www.etiantian.org
post.etiantian.org

一样可以做到

root@lp:/tmp# cat oldboy.log|cut -d / -f3|sort -r|uniq -c
      3 www.etiantian.org
      2 post.etiantian.org
      1 mp3.etiantian.org

这个个人感觉也挺简单的
接下来来一个最近才在学习的sed的用法

root@lp:/tmp# cat oldboy.log|sed 's#^http://##g'
www.etiantian.org/index.html
www.etiantian.org/1.html
post.etiantian.org/index.html
mp3.etiantian.org/index.html
www.etiantian.org/3.html
post.etiantian.org/2.html
root@lp:/tmp# cat oldboy.log|sed 's#^http://##g'|sed 's#/.*$##g'
www.etiantian.org
www.etiantian.org
post.etiantian.org
mp3.etiantian.org
www.etiantian.org
post.etiantian.org
root@lp:/tmp# cat oldboy.log|sed 's#^http://##g'|sed 's#/.*$##g'|sort -r|uniq -c    
      3 www.etiantian.org
      2 post.etiantian.org
      1 mp3.etiantian.org
root@lp:/tmp#

利用sed的替换、替换那个以http开头的和以/.*$结尾的行

最后这个我没想出来、老师给了答案。用那个tr的替换,我记得前天的文章里似乎还有关于tr
的用法

root@lp:/tmp# cat oldboy.log
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html
root@lp:/tmp# cat oldboy.log|tr /
tr: "/" 后缺少操作数
当进行替换操作时必须给定两组字符串。
Try 'tr --help' for more information.
root@lp:/tmp# cat oldboy.log|tr / "\n"
http:

www.etiantian.org
index.html
http:

www.etiantian.org
1.html
http:

post.etiantian.org
index.html
http:

mp3.etiantian.org
index.html
http:

www.etiantian.org
3.html
http:

post.etiantian.org
2.html
root@lp:/tmp# cat oldboy.log|tr / "\n"|grep "etian"
www.etiantian.org
www.etiantian.org
post.etiantian.org
mp3.etiantian.org
www.etiantian.org
post.etiantian.org
root@lp:/tmp# cat oldboy.log|tr / "\n"|grep "etian"|sort -r|uniq -c
      3 www.etiantian.org
      2 post.etiantian.org
      1 mp3.etiantian.org
利用那个tr把/换成了换行符\n这个感觉挺好的
但是我觉得有一处就是利用grep过滤etian在这个数据可以,
我的方法是grep "com\|org"
就是过滤一些范围多一些这样方便以后取数据,当然过滤的方法多了
也是需要根据实际的例子来考虑

就总结这么多,老师还讲了一些利用awk一些内置函数的一些方法。但是
现在的我就会这么些就好了。
毕竟手打,就这样

你可能感兴趣的:(No)