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.