awk

一、awk介紹正則表達式

  全稱:Aho Weinberger Kernaighan 三我的的首字母縮寫shell

  grep 行過濾器express

    -o -i -v取反 -E正則表達式  grep egrep fgrep(匹配速度最快)數組

  sed 行編輯器bash

    -n p  一、地址定界 二、命令 p a i w c \ s/pat/str/  g|&編輯器

  awk 報告生成器函數

    經過模式匹配以及本身自己的語言格式,來獲取,並輸入工具

  【默認狀況下,三個工具都不去編輯源文件】3d

  FS=" "指定分隔符對象

  

二、awk原理

 

三、awk用法

   awk 選項 ... 'program'  file...

  一、program 必須使用!單引號!

  二、多條program語句使用大括號包含起來,能夠並列,能夠嵌套

  awk '{print}' /etc/passwd 

四、potion

   -F   指定分隔符

  awk -F[/:] '{print $1,$3}' a.txt

      其中[ ]內表示多個字符中的任意一個

  -v     由於awk是一種語言編輯器,能本身定義變量,同時也有內置變量(與環境變量相似)

    手動指定變量參數

  awk -v a="a/b" '{print }' a.txt

    給a賦值,打印a這個變量

    一、a是自定義變量 -v FS=":"

    二、在awk中調用變量 不用加¥符號

  awk '{a="a/b";print a}' a.txt

  擴展: 瞭解cut 與awk的區別

五、awk本身的固定語法語句

  一、print

    默認輸出(在屏幕上)

    在awk中沒有保存命令,咱們能夠關聯別的命令來保存awk的結果

    awk '{a="a/b";print a}' a.txt | tee a.bak

  二、printf ---實現格式化輸出

  格式符

  %s 字符串

  %d %i 數值

   %e %E  科學計算數值

   %c Acsii碼值

  %f 浮點數

  %u 無符號整數

   %%  逃逸符  只顯示%本身

  修飾符

  默認爲右對齊

  - 表明左對齊

  %5.4f

  5 所佔位屬

  4 所取小數位

  

 

  三、變量(內置變量、自定義變量)

  內置變量 ---環境變量(bash)(env、set -C +C)

  awk語言所默認支持的變量

  FS  定義輸入分隔符的變量

  OFS    定義輸出分隔符的變量

  NF  定義行分割之後的參數個數($NF 分割之後最後一列的變量)

      變量引用的時候不用加$,$0,$1....$n

  

  NR  定義文件的行數,定義多個文件的文件行,行號疊加

  FNR  文集只計算本身的行號

  

  begin{語句}只在行循環開始時,執行一次

  ARGC 整個命令的段數  [注意:不包含'program'自己]

  ARGV 數組,用來調用命令中,指定的段ARGV[2] 【注意:數組中也不包含'program'】

  RS  指定換行符  \n能夠指定新的換行符,不影響自己的換行

  ORS 輸出的時候指定的換行符,將默認換行符替換爲指定字符

  

 

  自定義變量

    -v 變量=值

    在後面'program'中去調用自定義變量時,直接使用便可或者將「變量=值」語句直接寫                  在’program‘亦可

  

 

  四、模式匹配(地址定界)
  一、空值、沒有定義,默認就將文本全部的行,放入awk進行循環

  二、對固定的1,3行進行操做

  sed -n '1,3p' /etc/passwd

  awk '1,3{print}' /etc/passwd  ///awk默認不支持1-3 1,3等等,這樣數值的直接寫法;

  awk 'NR>=1&&NR<=3{print}' /etc/passwd  //經過NR變量來指定

  三、/pat1/

  sed -n /pat1/p /etc/passwd

  awk '/r..ter/{print}' /etc/passwd

  四、/pat1/,/pat2/  第一次匹配pat1到第一次匹配pat2,之間的行

  

  五、模式匹配能夠直接使用判斷語句

  awk -F:'$NF=="/bin/bash"{print $1,$3}' /etc/passwd 

  六、BEGIN在默認循環進行操做前所要執行的語句;

  

 

  五、操做符

   運算操做符:

      + - * /  %  **  //  ^

    比較運算符

    == ! = > < >= <=

    ~!~

    

 

    邏輯操做符

    && || !

     賦值操做符:

    = += -= /= *= %= ^= //=

    條件表達式:

    語句條件? 條件成立語句;條件 不成立的語句

  六、常見action

  print printf 以及他任何命令的操做都是action

  一、expressions

  二、control statement 控制語句  例如:  if while等

    邏輯關係語句判斷來進行結合

  三、組合語句  compound statements

    /pat1/{{  }{;}}

  四、input statements輸入語句

  五、output statements 輸出語句

  七、常見語言(if while do for break continue )

    一、if語句

        語法格式:if(條件表達式){執行語句}

          if(條件表達式){執行語句} else {執行語句}

      awk '/^title/{if(NF<=2) {print}else {print "參數過少"}}' /boot/grup/grup.conf

      awk '/^title/{if(NF>=2) print $4}' /boot/grup/grup.conf

    二、while語句

      只有對行參數進行遍歷的時候纔會使用循環;

      語法格式:while(條件表達式){循環體}

     

     

      

 

  八、數組

  在awk中,數組和shell中的數組特性相同

      注意:awk中數組不用定義,只要使用了,就有值爲空的默認數組;這在作數據統計的時候很是常見!!!!!

    行遍歷 - -->   實際上就是整個文件的遍歷

    列遍歷  ---->   取對象固定某列中的相同數據的統計

      注意:數組經過for語句再給其餘變量進行賦值的時候,賦值的是index索引信息;

 

  九、函數

     一、內置函數

      函數的調用:funcation(參數)

      length()  統計字符串長度

      數學運算上使用的函數  sin()  cos().....

      sub(x,x,x)  替換第一個匹配到的值

      

 

      gsub(x,x,x)  替換該行所匹配道德全部值

 

      split(x,x,x)  指定分隔符去切割文件

    二、自定義函數

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息