第十九節(jié)課操作系統(tǒng)awk命令

  1. 課程知識回顧(提問環(huán)節(jié))

    1. sed命令作用了解
      語法: sed [參數(shù)] '條件 指令' 文件信息
    2. sed命令實際應(yīng)用
      查詢數(shù)據(jù)信息 sed -n '/查詢信息/p' 文件信息
      添加數(shù)據(jù)信息 sed -i.bak '條件信息 i/a 添加的內(nèi)容' 文件信息
      刪除數(shù)據(jù)信息 sed -ri.bak '/條件01|條件02/d' 文件信息
      替換數(shù)據(jù)信息 sed -i.bak 's#要替換的信息#替換成什么信息#g' 文件信息
      sed -ri.bak 's#要替換的信息(保留信息)#替換成什么信息\1#g' 文件信息
      sed -i.bak 's#正則匹配信息#&#g' 文件信息
      sed -i.bak '3c oldboy' 文件信息
    3. sed命令測驗練習(xí)
      1. 利用sed命令取出IP地址
      2. 利用sed命令批量創(chuàng)建用戶
      3. 利用sed命令取出文件權(quán)限
      4. 利用sed命令批量修改文件擴展名
      5. 利用sed命令編寫腳本
        修改服務(wù)器IP地址信息腳本 sh change_ip.sh
  2. 三劍客命令awk概述
    gawk : pattern scanning and processing language
    可以進行模式掃描 和 是一門語言
    語法 : awk [參數(shù)] '模式{動作}' 文件
    sed [參數(shù)] '條件 指令' 文件信息
    原理 :

  3. 三劍客命令awk作用
    處理文件信息: 文本文件信息 日志文件信息 配置文件信息
    處理文件方式: 排除信息 查詢信息 統(tǒng)計信息 替換信息
    對文件列進行處理

  4. 三劍客命令awk操作
    創(chuàng)建測試環(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號碼
      awk '{print 13}' 文件信息
      第一個步驟: 找出需要編寫模式信息
      獲取xiaoyu信息
      awk '/Xiaoyu/' reg.txt
      awk '2~/Xiaoyu/' reg.txt 第二個步驟: 根據(jù)條件做處理 顯示滿足條件的第三列和第一列信息 awk '2~/Xiaoyu/{動作}' reg.txt
      awk '2~/Xiaoyu/{print1 3}' reg.txt 答案: [root@oldboyedu ~]# awk '2~/Xiaoyu/{print 1,3}' reg.txt
      Zhang 390320151
      [root@oldboyedu ~]# awk '2~/Xiaoyu/{print1" "$3}' reg.txt
      Zhang 390320151

    2. 姓氏是Zhang的人,顯示他的第二次捐款金額及他的名字
      第一個步驟: 找出需要編寫模式信息
      awk '1~/Zhang/' reg.txt 第二個步驟: 根據(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開頭的ID號碼的人的全名和ID號碼
      第一個步驟: 找出需要編寫模式信息
      awk '3~/^41/' reg.txt 第二個步驟: 根據(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號碼最后一位數(shù)字是1或5的人的全名
      第一個步驟: 找出需要編寫模式信息
      awk '3~/1|5/' reg.txt awk '3~/[15]/' reg.txt awk '3~/(1|5)/' reg.txt 第二個步驟: 根據(jù)條件做處理 答案 [root@oldboyedu ~]# awk '3~/[15]/{print1,2}' reg.txt|column -t Zhang Xiaoyu Wu Waiwai Wang Xiaoai Li Youjiu Lao Nanhai [root@oldboyedu ~]# awk '3~/[15]/{print1,2,3}' reg.txt|column -t
      Zhang Xiaoyu 390320151
      Wu Waiwai 70271111
      Wang Xiaoai 3515064655
      Li Youjiu 918391635
      Lao Nanhai 918391635

    5. 獲取文件中有井號或空行的內(nèi)容, 將空行和井號信息的行排除
      第一個步驟: 找出需要編寫模式信息
      awk '/#|^/' reg.txt awk '0~/#|^/' reg.txt 說明:0 表示將文件所有列信息進行顯示
      awk '0!~/#|^/' reg.txt
      awk '!/#|^/' reg.txt 第二個步驟: 根據(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!~/#|^/{print0}' 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的捐款,每個捐款數(shù)額都是以開頭, 如110220330
      awk '2~/Xiaoyu/{print4}' 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.txt15590201
      說明: $NF 表示文件的最后一列信息

  5. awk命令模式分類
    普通模式: 比較行信息
    [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
    說明: NR 表示文件行信息

    取出多行信息
    [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

    特殊模式:
    BEGIN{動作}: 在處理文件之前,先做什么事情
    [root@oldboyedu ~]# awk 'BEGIN{print "姓","名","號碼","捐款記錄"}{print $0}' reg.txt|column -t
    姓 名 號碼 捐款記錄
    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 "BEGIN{print 2+2}"
    4
    [root@oldboyedu ~]# awk "BEGIN{print 2-2}"
    0
    [root@oldboyedu ~]# awk "BEGIN{print 22}"
    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

    修改內(nèi)置變量:
    NF: 取出最后一列
    # awk '{print (NF-1)}' reg.txt --- 取出倒數(shù)第二列 NR: 表示行信息 FS: 指定列分隔符, 默認(rèn)識別空格為分割符 [root@oldboyedu ~]# awk 'BEGIN{FS="[: ]+"}{print4}' 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

    END{動作}: 在處理文件之后,再做什么事情
    [root@oldboyedu ~]# awk 'BEGIN{print "姓","名","號碼","捐款記錄"}{print $0}END{print "學(xué)生捐款登記表"}' reg.txt|column -t
    姓 名 號碼 捐款記錄
    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é)生捐款登記表

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

  6. awk對文件進行統(tǒng)計分析

    1. awk統(tǒng)計運算公式
      a 文本信息累加運算
      i=i+1
      統(tǒng)計文件行數(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
    b 數(shù)值信息求和運算
    sum=sum+nn 你要對文件第幾列信息做求和運算

    seq 10|awk '{sum=sum+$1}END{print sum}'

    55

    找出有faild信息, 總共出現(xiàn)了多少次 (awk統(tǒng)計)
    難點: windows文件如何傳輸?shù)絣inux系統(tǒng)
    yum install -y lrzsz --- 實現(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'

  7. 課程知識梳理:

    1. awk命令概念介紹: 語法 原理 BEGIN 處理文件 END
    2. awk命令操作說明: 作用 查詢 排除 替換
      參數(shù):
      -F : 指定列分割符號
      -v : 指定變量信息
      動作:
      print : 輸出指定信息
      gsub : 替換指定信息
      符號:
      ~ : 匹配信息 按照指定列進行匹配
      !~ : 將匹配的信息取反
      // : 指定匹配信息
    3. awk命令模式分類
      BEGIN{}: 處理文件前, 執(zhí)行什么動作
      END{}: 處理文件后, 執(zhí)行什么動作
      內(nèi)置變量: FS NF NR --$0
    4. awk命令實現(xiàn)運算功能
      累加公式: i=i+1 i++
      求和運算: sum=sum+$n
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容