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.