awk命令基本用法(二)

一:awk處理條件

使用正則設置條件瘟斜,輸出其中以bash結尾的完整記錄:

[root@svr5 ~]# awk -F: '/bash$/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

輸出包含root的行數據:

[root@svr5 ~]# awk -F: '/root/' /etc/passwd

輸出root或adm賬戶的用戶名和UID信息:

[root@svr5 ~]# awk -F: '/^(root|adm)/{print $1,$3}' /etc/passwd
root 0
adm 3

輸出賬戶名稱包含root的基本信息(第1列包含root):

 [root@svr5 ~]# awk -F: '$1~/root/' /etc/passwd

輸出其中登錄Shell不以nologin結尾(對第7個字段做!~反向匹配)的用戶名、登錄Shell信息:

[root@svr5 ~]# awk -F: '$7!~/nologin$/{print $1,$7}' /etc/passwd
root /bin/bash
sync /bin/sync
shutdown /sbin/shutdown
使用數值/字符串比較設置條件

比較符號:==(等于) !=(不等于) >(大于)>=(大于等于) <(小于) <=(小于等于)

輸出第3行(行號NR等于3)的用戶記錄:

[root@svr5 ~]# awk -F: 'NR==3{print}' /etc/passwd

輸出賬戶UID大于等于1000的賬戶名稱和UID信息:

[root@svr5 ~]# awk -F: '$3>=1000{print $1,$3}' /etc/passwd
tom 1000
jerry 1001

輸出賬戶UID小于10的賬戶名稱和UID信息:

[root@svr5 ~]# awk -F: '$3<10{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8

輸出用戶名為“root”的行:

[root@svr5 ~]# awk -F: '$1=="root"' /etc/passwd
root:x:0:0:root:/root:/bin/bash
邏輯測試條件

輸出賬戶UID大于10并且小于20的賬戶信息:

[root@svr5 ~]# awk -F: '$3>10 && $3<20' /etc/passwd
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

輸出賬戶UID大于1000或者賬戶UID小于10的賬戶信息:

[root@svr5 ~]# awk -F: '$3>1000 || $3<10' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
varnish:x:1001:1001::/home/varnish:/sbin/nologin
nginx:x:1002:1002::/home/nginx:/sbin/nologin
數學運算
[root@svr5 ~]# awk 'BEGIN{x++;print x}'
1
[root@svr5 ~]# awk 'BEGIN{x=8;print x+=2}'
10
[root@svr5 ~]# awk 'BEGIN{x=8;x--;print x}'
7
[root@svr5 ~]# awk 'BEGIN{print 2+3}'
5
[root@svr5 ~]# awk 'BEGIN{print 2*3}'
6
[root@svr5 ~]# awk 'BEGIN{print 2*3}'
6
[root@svr5 ~]# awk 'BEGIN{ print 23%8}'
7
[root@svr5 ~]# seq  200 | awk  '$1%3==0'       //找200以內3的倍數
… …

1)列出UID間于1~1000的用戶詳細信息:

[root@svr5 ~]# awk -F: '$3>=1 && $3<=1000' /etc/passwd

2)輸出/etc/hosts映射文件內以127或者192開頭的記錄:

[root@svr5 ~]# awk  '/^(127|192)/' /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.4.5  svr5.tarena.com svr5

3)列出100以內整數中7的倍數或是含7的數:

[root@svr5 ~]# seq 100 | awk '$1%7==0||$1~/7/'
7
14
17
21
27
28
35
37
42
47
.. ..

二:awk數組

數組是一個可以存儲多個值的變量痪寻,具體使用的格式如下:

定義數組的格式:數組名[下標]=元素值

調用數組的格式:數組名[下標]

遍歷數組的用法:for(變量 in 數組名){print 數組名[變量]}螺句。
[root@svr5 ~]# awk 'BEGIN{a[0]=11;a[1]=88;print a[1],a[0]}'
88 11
[root@svr5 ~]# awk 'BEGIN{a++;print a}'
1
[root@svr5 ~]# awk 'BEGIN{a0++;print a0}'
1
[root@svr5 ~]# awk 'BEGIN{a[0]++;print a[0]}'
1
[root@svr5 ~]# awk 'BEGIN{a[0]=0;a[1]=11;a[2]=22; for(i in a){print i,a[i]}}'
0 0
1 11
2 22

注:awk數組的下標除了可以使用數字,也可以使用字符串槽华,字符串需要使用雙引號:

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

三:awk擴展應用

使用awk工具壹蔓,分析Web日志的訪問量排名,要求獲得客戶機的地址猫态、訪問次數佣蓉,并且按照訪問次數排名:

在分析Web日志文件時,每條訪問記錄的第一列為客戶機的IP地址亲雪,其中會有很多重復的IP勇凭,所以還需要統(tǒng)計重復記錄的數量并且進行排序;
通過awk提取信息時义辕,利用IP地址作為數組下標虾标,每遇到一個重復值就將此數組元素遞增1,最終就獲得了這個IP地址出現的次數灌砖;
針對文本排序輸出可以采用sort命令璧函,相關的常見選項為-r傀蚌、-n、-k蘸吓。其中-n表示按數字順序升序排列善炫,而-r表示反序,-k可以指定按第幾個字段來排序库继。

1)提取IP地址及訪問量

[root@svr5 ~]# 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)對第1)步的結果根據訪問量排名

[root@svr5 ~]# 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
.. ..
例:編寫監(jiān)控腳本箩艺,實現計算機各個性能數據監(jiān)控的功能,監(jiān)控如下項目:

CPU負載
網卡流量
內存剩余容量
磁盤剩余容量
計算機賬戶數量
當前登錄賬戶數量
計算機當前開啟的進程數量
本機已安裝的軟件包數量

先了解查看性能數據的命令

[root@svr5 ~]# uptime                            //查看CPU負載
[root@svr5 ~]# ifconfig eth0                    //查看網卡流量
[root@svr5 ~]# free                            //查看內存信息
[root@svr5 ~]# df                                //查看磁盤空間
[root@svr5 ~]# wc -l /etc/passwd                //查看計算機賬戶數量
[root@svr5 ~]# who |wc -l                        //查看登錄賬戶數量
[root@svr5 ~]# rpm -qa |wc -l                    //查看已安裝軟件包數量

腳本:

[root@svr5 ~]# vim test.sh
#!/bin/bash
ip=`ifconfig eth0 | awk '/inet /{print $2}'`
echo "本地IP地址是:"$ip
cpu=`uptime | awk '{print $NF}'`            
#awk中NF為當前行的列數宪萄,$NF是最后一列
echo "本機CPU最近15分鐘的負載是:"$cpu
net_in=`ifconfig eth0 | awk '/RX p/{print $5}'`
echo "入站網卡流量為:"$net_in
net_out=`ifconfig eth0 | awk '/TX p/{print $5}'`
echo "出站網卡流量為:"$net_out
mem=`free | awk '/Mem/{print $4}'`
echo "內存剩余容量為:"$mem
disk=`df | awk '/\/$/{print $4}'`
echo "根分區(qū)剩余容量為:"$disk
user=`cat /etc/passwd |wc -l`
echo "本地賬戶數量為:"$user
login=`who | wc -l`
echo "當前登陸計算機的賬戶數量為:"$login
process=`ps aux | wc -l`
echo "當前計算機啟動的進程數量為:"$process
soft=`rpm -qa | wc -l`
echo "當前計算機已安裝的軟件數量為:"$soft
例:編寫安全檢測腳本

編寫腳本艺谆,防止遠程ssh暴力破解密碼,配置如下監(jiān)控項目:

檢測ssh登錄日志拜英,如果遠程登陸賬號名錯誤3次静汤,則屏蔽遠程主機的IP
檢測ssh登錄日志,如果遠程登陸密碼錯誤3次居凶,則屏蔽遠程主機的IP

1)過濾帳戶名失敗的命令(登陸日志文件為/var/log/secure)

[root@svr5 ~]# awk '/Invalid user/{print $10}' /var/log/secure

2)過濾密碼失敗的命令

awk '/Failed password/{print $11}' /var/log/secure

腳本:

[root@svr5 ~]# vim test.sh
#!/bin/bash
awk '/Failed password/{print $11}' /var/log/secure  | awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' | awk '$1>3{print $2}'

awk '/Invalid user/{print $10}' /var/log/secure  | awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' | awk '$1>3{print $2}'
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末撒妈,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子排监,更是在濱河造成了極大的恐慌,老刑警劉巖杰捂,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舆床,死亡現場離奇詭異,居然都是意外死亡嫁佳,警方通過查閱死者的電腦和手機挨队,發(fā)現死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒿往,“玉大人盛垦,你說我怎么就攤上這事∪柯” “怎么了腾夯?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔬充。 經常有香客問我蝶俱,道長,這世上最難降的妖魔是什么饥漫? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任榨呆,我火速辦了婚禮,結果婚禮上庸队,老公的妹妹穿的比我還像新娘积蜻。我一直安慰自己闯割,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般泛鸟。 火紅的嫁衣襯著肌膚如雪整胃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天键耕,我揣著相機與錄音,去河邊找鬼。 笑死澳化,一個胖子當著我的面吹牛,可吹牛的內容都是我干的稳吮。 我是一名探鬼主播缎谷,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灶似!你這毒婦竟也來了列林?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酪惭,失蹤者是張志新(化名)和其女友劉穎希痴,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體春感,經...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡砌创,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了鲫懒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫩实。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖窥岩,靈堂內的尸體忽然破棺而出甲献,到底是詐尸還是另有隱情,我是刑警寧澤颂翼,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布晃洒,位于F島的核電站,受9級特大地震影響朦乏,放射性物質發(fā)生泄漏锥累。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一集歇、第九天 我趴在偏房一處隱蔽的房頂上張望桶略。 院中可真熱鬧,春花似錦、人聲如沸际歼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹅心。三九已至吕粗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旭愧,已是汗流浹背颅筋。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留输枯,地道東北人议泵。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像桃熄,于是被迫代替她去往敵國和親先口。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容

  • 目錄 一瞳收、awk簡介及常見用法二碉京、awk的過濾的機制BEGIN{ }END{ }指令三、awk數值/字符串比較/邏...
    Bigyong閱讀 419評論 0 1
  • 一螟深,awk簡介 awk,文本處理三劍客之一谐宙,它的名稱得自于它的三個創(chuàng)始人Alfred Aho 、Peter Wei...
    千紙鶴V閱讀 2,413評論 0 6
  • awk 標簽(空格分隔): shell編程 Awk文本處理 1.進行逐行掃描文件(或流), 從第一行到最后一行2....
    五行哥閱讀 869評論 0 3
  • 1界弧、ls 文件屬性:-:普通文件 d:目錄文件 b:塊設備 c:字符設備文件 l:符號連接...
    看清了也就看輕了彡閱讀 2,017評論 0 2
  • 1卧惜、ls 文件屬性:-:普通文件 d:目錄文件 b:塊設備 c:字符設備文件 l:符號連接...
    關于Linux底層開發(fā)閱讀 424評論 0 2