Linux awk 命令詳解(二) if 分支 數(shù)組

目錄

一贪绘、awk if分支結(jié)構(gòu)
二炎咖、awk數(shù)組 for循環(huán)

一、awk if分支結(jié)構(gòu)

  • if分支結(jié)構(gòu)(單分支来农、雙分支鞋真、多分支)
  • 單分支
    -- if(條件){編輯指令}
  • 雙分支
    -- if(條件){編輯指令1}else{編輯指令2}
  • 多分支
    -- if(條件){編輯指令1}else if(條件){編輯指令2}.. ..
    else{編輯指令N}

案例1
awk過(guò)濾中的if分支結(jié)構(gòu)
1)單分支
統(tǒng)計(jì)/etc/passwd文件中UID小于或等于1000的用戶個(gè)數(shù):

[root@case100 ~]# awk -F: '{if($3<=1000){i++}}END{print i}' /etc/passwd
23

統(tǒng)計(jì)/etc/passwd文件中UID大于1000的用戶個(gè)數(shù):

[root@case100 ~]# awk -F: '{if($3>1000){i++}}END{print i}' /etc/passwd
3

統(tǒng)計(jì)/etc/passwd文件中登錄Shell是“/bin/bash”的用戶個(gè)數(shù):

[root@case100 ~]# awk -F: '{if($7~/bash$/){i++}}END{print i}' /etc/passwd
5

2)雙分支
分別統(tǒng)計(jì)/etc/passwd文件中UID小于或等于1000、UID大于1000的用戶個(gè)數(shù):

[root@case100 ~]# awk -F: '{if($3<=1000){i++}else{j++}}END{print i,j}' /etc/passwd
23 3

分別統(tǒng)計(jì)/etc/passwd文件中登錄Shell是“/bin/bash”沃于、 登錄Shell不是“/bin/bash”的用戶個(gè)數(shù):

[root@case100 ~]# awk -F: '{if($7~/bash$/){i++}else{j++}}END{print i,j}' /etc/passwd
5 21

二涩咖、awk數(shù)組

  • 數(shù)組的語(yǔ)法格式
    數(shù)組是一個(gè)可以存儲(chǔ)多個(gè)值的變量,具體使用的格式如下:

  • 定義數(shù)組
    -- 格式:數(shù)組名[下標(biāo)]=元素值

  • 調(diào)用數(shù)組
    -- 格式:數(shù)組名[下標(biāo)]

  • 遍歷數(shù)組
    -- 用法:for(變量 in 數(shù)組名){print 數(shù)組名[變量]}
    案例2 for循環(huán)

[root@case100 ~]# awk 'BEGIN{a[0]=11;a[1]=88;print a[1],a[0]}'
88 11
[root@case100 ~]# awk 'BEGIN{a++;print a}'
1
[root@case100 ~]# awk 'BEGIN{a[0]=0;a[1]=11;a[2]=222;for(i in a){print i,a[i]}}'
0 0
1 11
2 222

注意繁莹,awk數(shù)組的下標(biāo)除了可以使用數(shù)字檩互,也可以使用字符串,字符串需要使用雙引號(hào):

[root@case100 ~]# awk 'BEGIN{a["hehe"]=22;print a["hehe"]}'
22

案例3:awk擴(kuò)展應(yīng)用
1)awk統(tǒng)計(jì)Web訪問(wèn)排名
在分析Web日志文件時(shí)咨演,每條訪問(wèn)記錄的第一列就是客戶機(jī)的IP地址闸昨,其中會(huì)有很多重復(fù)的IP地址。因此只用awk提取出這一列是不夠的薄风,還需要統(tǒng)計(jì)重復(fù)記錄的數(shù)量并且進(jìn)行排序饵较。
通過(guò)awk提取信息時(shí),利用IP地址作為數(shù)組下標(biāo)遭赂,每遇到一個(gè)重復(fù)值就將此數(shù)組元素遞增1循诉,最終就獲得了這個(gè)IP地址出現(xiàn)的次數(shù)。
針對(duì)文本排序輸出可以采用sort命令嵌牺,相關(guān)的常見(jiàn)選項(xiàng)為-r打洼、-n、-k逆粹。其中-n表示按數(shù)字順序升序排列募疮,而-r表示反序,-k可以指定按第幾個(gè)字段來(lái)排序

實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行僻弹。
步驟一:統(tǒng)計(jì)Web訪問(wèn)量排名
分步測(cè)試阿浓、驗(yàn)證效果如下所述。
1)提取IP地址及訪問(wèn)量

[root@case100 ~]# awk '{ip[$1]++} \
>  END{for(i in ip) {print ip[i],i }}' /var/log/httpd/access_log
4  127.0.0.1
17 192.168.4.5
13 192.168.4.110
... ...

2)對(duì)第1)步的結(jié)果根據(jù)訪問(wèn)量排名

[root@case100 ~]# awk  '{ip[$1]++} END{for(i in ip) {print i,ip[i]}}'  /var/log/httpd/access_log | sort -nr
17  192.168.4.5
13  192.168.4.110
4   127.0.0.1
... ...

案例4:編寫(xiě)監(jiān)控腳本
本案例要求編寫(xiě)腳本蹋绽,實(shí)現(xiàn)計(jì)算機(jī)各個(gè)性能數(shù)據(jù)監(jiān)控的功能芭毙,具體監(jiān)控項(xiàng)目要求如下:
CPU負(fù)載
網(wǎng)卡流量
內(nèi)存剩余容量
磁盤(pán)剩余容量
計(jì)算機(jī)賬戶數(shù)量
當(dāng)前登錄賬戶數(shù)量
計(jì)算機(jī)當(dāng)前開(kāi)啟的進(jìn)程數(shù)量
本機(jī)已安裝的軟件包數(shù)量

步驟
實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。
步驟一:準(zhǔn)備工作
1)查看性能數(shù)據(jù)的命令

[root@case100 ~]# uptime                            //查看CPU負(fù)載
[root@case100 ~]# ifconfig eth0                    //查看網(wǎng)卡流量
[root@case100 ~]# free                            //查看內(nèi)存信息
[root@case100 ~]# df                                //查看磁盤(pán)空間
[root@case100 ~]# wc -l /etc/passwd                //查看計(jì)算機(jī)賬戶數(shù)量
[root@case100 ~]# who |wc -l                        //查看登錄賬戶數(shù)量
[root@case100 ~]# rpm -qa |wc -l                    //查看已安裝軟件包數(shù)量

步驟二:編寫(xiě)參考腳本
1)腳本內(nèi)容如下:

[root@svr5 ~]# vim test.sh
#!/bin/bash
ip=`ifconfig eth0 | awk '/inet /{print $2}'`
echo "本地IP地址是:"$ip
cpu=`uptime | awk '{print $NF}'`            
#awk中NF為當(dāng)前行的列數(shù)卸耘,$NF是最后一列
echo "本機(jī)CPU最近15分鐘的負(fù)載是:"$cpu
net_in=`ifconfig eth0 | awk '/RX p/{print $5}'`
echo "入站網(wǎng)卡流量為:"$net_in
net_out=`ifconfig eth0 | awk '/TX p/{print $5}'`
echo "出站網(wǎng)卡流量為:"$net_out
mem=`free | awk '/Mem/{print $4}'`
echo "內(nèi)存剩余容量為:"$mem
disk=`df | awk '/\/$/{print $4}'`
echo "根分區(qū)剩余容量為:"$disk
user=`cat /etc/passwd |wc -l`
echo "本地賬戶數(shù)量為:"$user
login=`who | wc -l`
echo "當(dāng)前登陸計(jì)算機(jī)的賬戶數(shù)量為:"$login
process=`ps aux | wc -l`
echo "當(dāng)前計(jì)算機(jī)啟動(dòng)的進(jìn)程數(shù)量為:"$process
soft=`rpm -qa | wc -l`
echo "當(dāng)前計(jì)算機(jī)已安裝的軟件數(shù)量為:"$soft
[root@logfile ~]# bash test.sh 
本地IP地址是:192.168.44.99
本機(jī)CPU最近15分鐘的負(fù)載是:0.05
入站網(wǎng)卡流量為:4942189501092
出站網(wǎng)卡流量為:9051024375282
內(nèi)存剩余容量為:160136
根分區(qū)剩余容量為:84142524
本地賬戶數(shù)量為:32
當(dāng)前登陸計(jì)算機(jī)的賬戶數(shù)量為:1
當(dāng)前計(jì)算機(jī)啟動(dòng)的進(jìn)程數(shù)量為:160
當(dāng)前計(jì)算機(jī)已安裝的軟件數(shù)量為:403
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末退敦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蚣抗,更是在濱河造成了極大的恐慌侈百,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翰铡,死亡現(xiàn)場(chǎng)離奇詭異钝域,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)锭魔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)例证,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人迷捧,你說(shuō)我怎么就攤上這事织咧。” “怎么了漠秋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵烦感,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我膛堤,道長(zhǎng)手趣,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任肥荔,我火速辦了婚禮绿渣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘燕耿。我一直安慰自己中符,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布誉帅。 她就那樣靜靜地躺著淀散,像睡著了一般右莱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上档插,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天慢蜓,我揣著相機(jī)與錄音,去河邊找鬼郭膛。 笑死晨抡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的则剃。 我是一名探鬼主播耘柱,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棍现!你這毒婦竟也來(lái)了调煎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤己肮,失蹤者是張志新(化名)和其女友劉穎汛蝙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體朴肺,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窖剑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戈稿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片西土。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鞍盗,靈堂內(nèi)的尸體忽然破棺而出需了,到底是詐尸還是另有隱情,我是刑警寧澤般甲,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布肋乍,位于F島的核電站,受9級(jí)特大地震影響敷存,放射性物質(zhì)發(fā)生泄漏墓造。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一锚烦、第九天 我趴在偏房一處隱蔽的房頂上張望觅闽。 院中可真熱鬧,春花似錦涮俄、人聲如沸蛉拙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)孕锄。三九已至吮廉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畸肆,已是汗流浹背宦芦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恼除,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓曼氛,卻偏偏與公主長(zhǎng)得像豁辉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舀患,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351