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 [[email protected] /]# 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 [[email protected] /]# 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 [[email protected] /]# 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 [[email protected] /]# awk -F "/" '{print $3}' oldboy.log|sort|uniq -----運用uniq去重命令去掉重複的 mp3.etiantian.org post.etiantian.org www.etiantian.org [[email protected] /]# awk -F "/" '{print $3}' oldboy.log|sort|uniq -c -----運用uniq -c對重複域名計數 1 mp3.etiantian.org 2 post.etiantian.org 3 www.etiantian.org
法二: 運用awk陣列
[[email protected] /]# 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地址前十,統計網路狀態
[[email protected] /]# 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.