2019-07-25 awk

Linux運(yùn)維學(xué)習(xí) Day19

Ⅰ.三劍客命令awk

1.概述

gawk : pattern scanning and processing language
       可以進(jìn)行模式掃描  和  是一門語(yǔ)言

語(yǔ)法 : awk [參數(shù)] '模式{動(dòng)作}'  文件
       sed [參數(shù)] '條件 指令'   文件信息

2.三劍客命令awk作用

處理文件信息: ①文本文件信息 
             ②日志文件信息 
             ③配置文件信息

處理文件方式: ①排除信息 
             ②查詢信息 
             ③統(tǒng)計(jì)信息 
             ④替換信息 
             ⑤對(duì)文件列進(jìn)行處理

Ⅱ.三劍客命令awk操作

實(shí)際操作演練: 創(chuàng)建測(cè)試環(huán)境

             [root@oldboyedu ~]# cat reg.txt
             Zhang  Dandan    41117397    :250:100:175
             Zhang  Xiaoyu    390320151   :155:90:201
             Meng   Feixue    80042789    :250:60:50
             Wu     Waiwai    70271111    :250:80:75
             Liu    Bingbing  41117483    :250:100:175
             Wang   Xiaoai    3515064655  :50 :95 :135
             Zi     Gege      1986787350  :250:168:200
             Li     Youjiu    918391635   :175:75:300
             Lao    Nanhai    918391635   :250:100:175

1.顯示xiaoyu的姓氏和ID號(hào)碼

             awk '{print $1 $3}'  文件信息
    第一個(gè)步驟: 找出需要編寫模式信息
               獲取xiaoyu信息
               awk '/Xiaoyu/'  reg.txt
               awk '$2~/Xiaoyu/' reg.txt

    第二個(gè)步驟: 根據(jù)條件做處理
               顯示滿足條件的第三列和第一列信息
               awk '$2~/Xiaoyu/{動(dòng)作}' reg.txt
               awk '$2~/Xiaoyu/{print $1 $3}' reg.txt
    答案:
         [root@oldboyedu ~]# awk '$2~/Xiaoyu/{print $1,$3}' reg.txt
         Zhang 390320151
         [root@oldboyedu ~]# awk '$2~/Xiaoyu/{print $1" "$3}' reg.txt
         Zhang 390320151

2. 姓氏是Zhang的人,顯示他的第二次捐款金額及他的名字

         第一個(gè)步驟: 找出需要編寫模式信息 
         awk '$1~/Zhang/' reg.txt

         第二個(gè)步驟: 根據(jù)條件做處理 
         awk '$1~/Zhang/{print $1,$2,$4}' reg.txt
         awk -F ":"  '$1~/Zhang/{print $3}' reg.txt

    答案:
         [root@oldboyedu ~]# awk -F "[: ]+"  '$1~/Zhang/{print $1,$2,$5}' reg.txt
         Zhang Dandan 100
         Zhang Xiaoyu 90

3.顯示所有以41開(kāi)頭的ID號(hào)碼的人的全名和ID號(hào)碼

    第一個(gè)步驟: 找出需要編寫模式信息 
    awk '$3~/^41/' reg.txt      
    
    第二個(gè)步驟: 根據(jù)條件做處理

    答案:
    awk '$3~/^41/{print $1,$2,$3}' reg.txt
    [root@oldboyedu ~]# awk '$3~/^41/{print $1,$2,$3}' reg.txt
    Zhang Dandan 41117397
    Liu Bingbing 41117483
    [root@oldboyedu ~]# awk '$3~/^41/{print $1,$2,$3}' reg.txt|column -t
    Zhang  Dandan    41117397
    Liu    Bingbing  41117483

4.顯示所有ID號(hào)碼最后一位數(shù)字是1或5的人的全名

    第一個(gè)步驟: 找出需要編寫模式信息
    awk '$3~/1$|5$/' reg.txt
    awk '$3~/[15]$/' reg.txt
    awk '$3~/(1|5)$/' reg.txt

    第二個(gè)步驟: 根據(jù)條件做處理
    
    答案:
    [root@oldboyedu ~]# awk '$3~/[15]$/{print $1,$2}' reg.txt|column -t
    Zhang  Xiaoyu
    Wu     Waiwai
    Wang   Xiaoai
    Li     Youjiu
    Lao    Nanhai
    [root@oldboyedu ~]# awk '$3~/[15]$/{print $1,$2,$3}' reg.txt|column -t
    Zhang  Xiaoyu  390320151
    Wu     Waiwai  70271111
    Wang   Xiaoai  3515064655
    Li     Youjiu  918391635
    Lao    Nanhai  918391635

5.獲取文件中有井號(hào)或空行的內(nèi)容, 將空行和井號(hào)信息的行排除

    第一個(gè)步驟: 找出需要編寫模式信息
    awk '/#|^$/'  reg.txt       
    awk '$0~/#|^$/'  reg.txt    
    說(shuō)明: $0 表示將文件所有列信息進(jìn)行顯示
    awk '$0!~/#|^$/'  reg.txt
    awk '!/#|^$/'  reg.txt

    第二個(gè)步驟: 根據(jù)條件做處理

    答案:
    [root@oldboyedu ~]# awk '$0!~/#|^$/'  reg.txt
    Zhang  Dandan    41117397    :250:100:175
    Meng   Feixue    80042789    :250:60:50
    Wu     Waiwai    70271111    :250:80:75
    Liu    Bingbing  41117483    :250:100:175
    Zi     Gege      1986787350  :250:168:200
    Li     Youjiu    918391635   :175:75:300
    Lao    Nanhai    918391635   :250:100:175
    Lao    Nanhai    Xiaoyu   :250:100:175
    [root@oldboyedu ~]# awk '$0!~/#|^$/{print $0}'  reg.txt
    Zhang  Dandan    41117397    :250:100:175
    Meng   Feixue    80042789    :250:60:50
    Wu     Waiwai    70271111    :250:80:75
    Liu    Bingbing  41117483    :250:100:175
    Zi     Gege      1986787350  :250:168:200
    Li     Youjiu    918391635   :175:75:300
    Lao    Nanhai    918391635   :250:100:175
    Lao    Nanhai    Xiaoyu   :250:100:175

6.顯示Xiaoyu的捐款,每個(gè)捐款數(shù)額都是以美元符號(hào)開(kāi)頭

    awk '$2~/Xiaoyu/{print $4}' reg.txt|sed 's#:#$#g'   
    awk '$2~/Xiaoyu/{print $4}' reg.txt|tr ':' '$'
    awk -F "[: ]+" '$2~/Xiaoyu/{print "$"$4,"$"$5,"$"$6}' reg.txt
    
    awk替換
    gsub  = gawk substitute
    gsub(/要替換的信息/,"替換成什么".$將第幾列)
    [root@oldboyedu ~]# awk  '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' reg.txt
    $155$90$201

    說(shuō)明: $NF 表示文件的最后一列信息 

Ⅲ.awk命令模式分類

1.普通模式: 比較行信息

[root@oldboyedu ~]# cat reg.txt
Zhang  Dandan    41117397    :250:100:175
Zhang  Xiaoyu    390320151   :155:90:201
Meng   Feixue    80042789    :250:60:50
Wu     Waiwai    70271111    :250:80:75
Liu    Bingbing  41117483    :250:100:175
Wang   Xiaoai    3515064655  :50:95:135
Zi     Gege      1986787350  :250:168:200
Li     Youjiu    918391635   :175:75:300
Lao    Nanhai    918391635   :250:100:175
[root@oldboyedu ~]# awk  'NR>2' reg.txt
Meng   Feixue    80042789    :250:60:50
Wu     Waiwai    70271111    :250:80:75
Liu    Bingbing  41117483    :250:100:175
Wang   Xiaoai    3515064655  :50:95:135
Zi     Gege      1986787350  :250:168:200
Li     Youjiu    918391635   :175:75:300
Lao    Nanhai    918391635   :250:100:175
[root@oldboyedu ~]# awk  'NR<2' reg.txt
Zhang  Dandan    41117397    :250:100:175   

說(shuō)明: NR 表示文件行信息

2.取出多行信息

[root@oldboyedu ~]# awk  'NR==2,NR==4' reg.txt  --- 連續(xù)多行
Zhang  Xiaoyu    390320151   :155:90:201
Meng   Feixue    80042789    :250:60:50
Wu     Waiwai    70271111    :250:80:75
[root@oldboyedu ~]# awk  'NR==2;NR==4' reg.txt  --- 不連續(xù)多行
Zhang  Xiaoyu    390320151   :155:90:201
Wu     Waiwai    70271111    :250:80:75

3.特殊模式

(1)BEGIN{動(dòng)作}:  在處理文件之前,先做什么事情
[root@oldboyedu ~]# awk  'BEGIN{print "姓","名","號(hào)碼","捐款記錄"}{print $0}' reg.txt|column -t
姓     名        號(hào)碼        捐款記錄
Zhang  Dandan    41117397    :250:100:175
Zhang  Xiaoyu    390320151   :155:90:201
Meng   Feixue    80042789    :250:60:50
Wu     Waiwai    70271111    :250:80:75
Liu    Bingbing  41117483    :250:100:175
Wang   Xiaoai    3515064655  :50:95:135
Zi     Gege      1986787350  :250:168:200
Li     Youjiu    918391635   :175:75:300
Lao    Nanhai    918391635   :250:100:175

(2)用于計(jì)算:
[root@oldboyedu ~]# awk "BEGIN{print 2+2}"
4
[root@oldboyedu ~]# awk "BEGIN{print 2-2}"
0
[root@oldboyedu ~]# awk "BEGIN{print 2*2}"
4
[root@oldboyedu ~]# awk "BEGIN{print 3/2}"
1.5
[root@oldboyedu ~]# awk "BEGIN{print 3^2}"
9
[root@oldboyedu ~]# awk "BEGIN{print 3^3}"
27
[root@oldboyedu ~]# awk "BEGIN{print 3**3}"
27
[root@oldboyedu ~]# awk "BEGIN{print 5%3}"
2

(3)修改內(nèi)置變量:
NF:  取出最后一列
     # awk '{print $(NF-1)}' reg.txt   --- 取出倒數(shù)第二列
NR:  表示行信息
FS:  指定列分隔符, 默認(rèn)識(shí)別空格為分割符
     [root@oldboyedu ~]# awk 'BEGIN{FS="[: ]+"}{print $4}' reg.txt
     250
     155
     250
     250
     250
     50
     250
     175
     250
     [root@oldboyedu ~]# awk -vFS="[: ]+"  '{print $1,$4}' reg.txt
     Zhang 250
     Zhang 155
     Meng 250
     Wu 250
     Liu 250
     Wang 50
     Zi 250
     Li 175
     Lao 250

(4)END{動(dòng)作}:    在處理文件之后,再做什么事情
[root@oldboyedu ~]# awk  'BEGIN{print "姓","名","號(hào)碼","捐款記錄"}{print $0}END{print "學(xué)生捐款登記表"}' reg.txt|column -t
姓              名        號(hào)碼        捐款記錄
Zhang           Dandan    41117397    :250:100:175
Zhang           Xiaoyu    390320151   :155:90:201
Meng            Feixue    80042789    :250:60:50
Wu              Waiwai    70271111    :250:80:75
Liu             Bingbing  41117483    :250:100:175
Wang            Xiaoai    3515064655  :50:95:135
Zi              Gege      1986787350  :250:168:200
Li              Youjiu    918391635   :175:75:300
Lao             Nanhai    918391635   :250:100:175
學(xué)生捐款登記表

實(shí)際作用:可以將統(tǒng)計(jì)后的最終結(jié)果進(jìn)行輸出

Ⅳ.awk對(duì)文件進(jìn)行統(tǒng)計(jì)分析

1.awk統(tǒng)計(jì)運(yùn)算公式
(1)文本信息累加運(yùn)算
  i=i+1
  統(tǒng)計(jì)文件行數(shù)
  awk '{i=i+1}END{print i}' test.txt
  
  [root@oldboyedu ~]# awk '/oldboy/{i=i+1}END{print i}' test.txt 
  4
  [root@oldboyedu ~]# awk '/oldboy/{i++}END{print i}' test.txt 
  4

(2)數(shù)值信息求和運(yùn)算 
  sum=sum+$n  $n  你要對(duì)文件第幾列信息做求和運(yùn)算 
  # seq 10|awk '{sum=sum+$1}END{print sum}'
  55

2.練習(xí)題:找出有faild信息, 總共出現(xiàn)了多少次 (awk統(tǒng)計(jì))
難點(diǎn): windows文件如何傳輸?shù)絣inux系統(tǒng)
yum install -y lrzsz   --- 實(shí)現(xiàn)windows和linux系統(tǒng)之間數(shù)據(jù)傳輸
rz  -- 將windows數(shù)據(jù)  ---> linux系統(tǒng)
sz  -- 將linux數(shù)據(jù)    ---> windows系統(tǒng)
    
awk '/Failed/{i++}END{print i}' secure-20161219
awk '$6~/Failed/{i++}END{print i}' secure-20161219'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子悍缠,更是在濱河造成了極大的恐慌,老刑警劉巖澈灼,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件絮缅,死亡現(xiàn)場(chǎng)離奇詭異怎燥,居然都是意外死亡负饲,警方通過(guò)查閱死者的電腦和手機(jī)堤魁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)返十,“玉大人妥泉,你說(shuō)我怎么就攤上這事《纯樱” “怎么了盲链?”我有些...
    開(kāi)封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)迟杂。 經(jīng)常有香客問(wèn)我刽沾,道長(zhǎng),這世上最難降的妖魔是什么排拷? 我笑而不...
    開(kāi)封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任侧漓,我火速辦了婚禮,結(jié)果婚禮上攻泼,老公的妹妹穿的比我還像新娘火架。我一直安慰自己鉴象,他們只是感情好忙菠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布何鸡。 她就那樣靜靜地躺著,像睡著了一般牛欢。 火紅的嫁衣襯著肌膚如雪骡男。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天傍睹,我揣著相機(jī)與錄音隔盛,去河邊找鬼。 笑死拾稳,一個(gè)胖子當(dāng)著我的面吹牛吮炕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播访得,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼龙亲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了悍抑?” 一聲冷哼從身側(cè)響起鳄炉,我...
    開(kāi)封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搜骡,沒(méi)想到半個(gè)月后拂盯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡记靡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年谈竿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摸吠。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榕订,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜕便,到底是詐尸還是另有隱情劫恒,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布轿腺,位于F島的核電站两嘴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏族壳。R本人自食惡果不足惜憔辫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仿荆。 院中可真熱鬧贰您,春花似錦坏平、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至杠园,卻和暖如春顾瞪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抛蚁。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工陈醒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞧甩。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓钉跷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親肚逸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爷辙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 操作系統(tǒng)命令三劍客-awk 一: 三劍客命令awk概述gawk : pattern scanning and pr...
    ManBu_x閱讀 311評(píng)論 0 1
  • 1. awk三劍客命令概述 # which awk--------查看awk在哪個(gè)目錄下 顯示: /u...
    男子瀚閱讀 270評(píng)論 0 0
  • 課程知識(shí)回顧(提問(wèn)環(huán)節(jié))sed命令作用了解語(yǔ)法: sed [參數(shù)] '條件 指令' 文件信息sed命令實(shí)際應(yīng)用查...
    威士忌酸WhiskySour閱讀 222評(píng)論 0 0
  • 我像 深扎于沼澤地里的海藻 皺縮的黑褐色彎曲了囚牢 而我此時(shí)就存于那哀凄的哭嚎 沉重的力在下壓 一層一層接近心跳 ...
    藍(lán)白璃閱讀 411評(píng)論 2 5
  • 巴菲特曾經(jīng)給前去看望他的學(xué)生出過(guò)一道題: 如果你們有一筆錢,可以投資你班上任何一位同學(xué)吼虎,你可以獲得他未來(lái)掙到的所有...
    林玉珍閱讀 222評(píng)論 0 1