1. 程式人生 > >Linux學習-10月18(awk)

Linux學習-10月18(awk)

9.6/9.7 awk

 

一、awk簡介

   1. awk是一種程式語言,用於對文字和資料進行處理的

   2. 具有強大的文字格式化能力

   3. 利用命令awk,可以將一些文字整理成為我們想要的樣子

   4. 命令awk是逐行進行處理的

    

二、awk使用示例

  • 指定分割符號進行分割:

        awk -F ':' '{print $1}'  passwd

        -F:指定分隔符,如果不指定分隔符預設是以空格或者空白行,作為分割

        $1:表示列印第一段,如果是$2就是列印第二段

        

        多段列印:

        awk -F ':' '{print $1,$3,$5}'  passwd 

        

        列印全部行:

        awk -F ':' '{print $0}' passwd

        

 

  • awk匹配

        awk '/root/' passwd

        

        awk可以使用正則,並且自帶脫意功能,不需要像grep -E 和sed -r 進行脫意

        

        

  •   awk匹配行,並進行分割

          匹配帶root的行,並列印第一、第三段

           

  •  awk也支援多個匹配,並進行分割

           匹配帶root的行,並列印第一、第三段

           匹配帶user的行,並列印第一段、第三段、第四段

           awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3,$4}' passwd

           

  • 使用正則進行列印匹配root或user行,並列印第一段

        awk -F ':' '/root|user/ {print $1}' passwd

        

  • 使用數學運算匹配

        1、匹配第三段等於0的,這裡可以不輸入print也會預設列印。

        awk -F ':' '$3==0' passwd

       

        2、匹配第三段大於1000的並指定列印第五段

       

        3、注意的是如果數字中使用了""號,會認為是字串則會按ascll碼進行排序

        

    4、不等於

        匹配第三段不等於4

        awk -F ':' '$3 != 4 {print $4}' passwd 

    5、&&和||

        匹配第三段大於1000,並且第六段等於/home/wxy的

         awk -F ':' '$3>=1000 && $6 =="/home/wxy"' passwd 

        

        awk -F ':' '$3==1000 || $6 =="/home/wxy"' passwd

        

  • awk 內建變數

        1、輸出分隔符:OFS

         

    2、NR:顯示行數

          

         NR也可以用來做判斷,比如說只打印前10行:

            awk -F ':' 'NR <=10 {print NR":" $0}' passwd

        

    3、NF:顯示段數

        awk -F ':' '$3 >=1000  {print NF" " $0}' passwd

        

  • awk改變值

       將第一段全部改為root

        awk -F ':' '$1="root"' passwd

        

        賦值後所有的分割符都沒了,可以再使用OFS加上:

        awk -F ':' '{OFS=":"} $1="root"' passwd

        

  • awk求和

        統計第三段的相加的總和

        awk -F ':' '{(oto=oto+$3)};END {prin^Coto}' passwd

        

  • awk if判斷

        awk -F ':' '{if($1=="root") {print $1}}' passwd