天天看点

Linux的shell编程前奏常见命令实战四

                                                                                                     Linux的shell编程前奏常见命令实战四   

一>处理以下文件内容,将域名取出并根据域名进行计数和排序处理

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

答案:

法一:运用awk,sort,uniq
[root@lll /]# 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@lll /]# awk -F "/" '{print $3}' oldboy.log     --------运用awk的-F参数分割取出域名
www.etiantian.org
www.etiantian.org
post.etiantian.org
mp3.etiantian.org
www.etiantian.org
post.etiantian.org
[root@lll /]# awk -F "/" '{print $3}' oldboy.log|sort     -------运用sort命令排序将域名相同的放在一起
mp3.etiantian.org
post.etiantian.org
post.etiantian.org
www.etiantian.org
www.etiantian.org
www.etiantian.org
[root@lll /]# awk -F "/" '{print $3}' oldboy.log|sort|uniq    -----运用uniq去重命令去掉重复的
mp3.etiantian.org
post.etiantian.org
www.etiantian.org
[root@lll /]# awk -F "/" '{print $3}' oldboy.log|sort|uniq -c  -----运用uniq -c对重复域名计数
      1 mp3.etiantian.org
      2 post.etiantian.org
      3 www.etiantian.org      

法二: 运用awk数组

[root@lll /]# awk -F "/" '{hotel[$3]++}END{for (domain in hotel)print domain,hotel[domain]}' oldboy.log|sort -rn
www.etiantian.org 3
post.etiantian.org 2
mp3.etiantian.org 1      

法三:统计服务器当前单IP连接数最大的IP地址前十,统计网络状态

[root@lll /]# netstat -an|grep EST|awk '{print $5}'|cut -d : -f 1|grep -v "^$"|awk '{++ETT[$1]} END {for (oldboy in ETT) print "ip:"oldboy "-----",ETT[oldboy] ''}'|sort -rn -k2|head -10
ip:192.168.0.101----- 1      

总结:

1>sz -y命令可以用于linux中putty,securecrt等工具向windows本地传输文件;rz -y可以用于windows本地向linux中传输。

2>awk数组总结:

命令拆分                         功能说明

/^tcp/    过滤出以tcp开头的行,“^”为正则表达式用法,以...开头,这里是过滤出以tcp开头的行。

S[]           定义了一个名叫S的数组,在awk中,数组下标通常从 1 开始,而不是 0。

NF          当前记录里域个数,默认以空格分隔,如上所示的记录,NF域个数等于6

$NF        表示一行的最后一个域的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是SYN_RECV或TIME_WAIT等。

S[$NF]    表示数组元素的值,如上所示的记录,就是S[TIME_WAIT]状态的连接数

++S[$NF]  表示把某个数加一,如上所示的记录,就是把S[TIME_WAIT]状态的连接数加一

END

for(key in S) 遍历S[]数组

print key,”\t”,S[key]  打印数组的键和值,中间用\t制表符分割,显示好一些。

3>sort排序,相当于asc;sort -rn,相当于desc

   uniq去重, 相当于distincted.