1. 程式人生 > >Linux的shell程式設計前奏常見命令實戰四

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.