awk的簡單用法

目錄
1.awk的基本格式
2.awk中的變量
3.操作符

一.awk的基本格式

  • awk [options] 'program' file…
  • program:pattern{action statements;..}
  • pattern和action:
  • •pattern部分決定動作語句何時觸發及觸發事件 BEGIN,END
  • • action statements對數據進行處理,放在{}內指明 print, printf
  • 分割符、域和記錄
    awk執行時,由分隔符分隔的字段(域)標記$1,$2..$n稱 爲域標識。$0爲所有域。
    文件的每一行稱爲記錄。
    省略action,則默認執行 print $0 的操作。
  • 工作原理
    1. 第一步:執行BEGIN{action;… }語句塊中的語句
    2. 第二步:從文件或標準輸入(stdin)讀取一行,然後執行pattern{ action;… }語句塊,它逐行掃描文件,從第一行到最後一行重複這 個過程,直到文件全部被讀取完畢。
    3. 第三步:當讀至輸入流末尾時,執行END{action;…}語句塊
      print格式:
      print item1, item2, ...
      要點
      1.逗號分隔符
      1. 輸出的各item可以字符串,也可以是數值;當前記錄的字段、 變量或awk的表達式
      2. 如省略item,相當於print $0
        printf
        格式化輸出:printf “FORMAT”, item1, item2, ...
        (1) 必須指定FORMAT
        (2) 不會自動換行,需要顯式給出換行控制符,\n
        (3) FORMAT中需要分別爲後面每個item指定格式符
        格式符:與item一一對應
        %c: 顯示字符的ASCII碼
        %d, %i: 顯示十進制整數
        %e, %E:顯示科學計數法數值
        %f:顯示爲浮點數 %g,
        %G:以科學計數法或浮點形式顯示數值
        %s:顯示字符串
        %u:無符號整數
        %%: 顯示%自身
        修飾符
        : #[.#]:第一個數字控制顯示的寬度;第二個#表示小數點後精度,%3.1f
        -: 左對齊(默認右對齊) %-15s
        +:顯示數值的正負符號 %+d

        二.awk中的變量

  • 1.內置變量
    1. FS:輸入字段分隔符,默認爲空白字符
    2. OFS:輸出字段分隔符,默認爲空白字符
    3. RS:輸入記錄分隔符,指定輸入時的換行符,原換行符仍有效
    4. ORS:輸出記錄分隔符,輸出時用指定符號代替換行符
    5. NF:字段數量
    6. NR:行號
    7. FNR:各文件分別計數,行號
    8. FILENAME:當前文件名
    9. ARGC:命令行參數的個數
      2.自定義變量
      -v var=value
      在program中直接定義

      三.操作符

      • 算術操作符:
        x+y, x-y, x
        y, x/y, x^y, x%y
        -x: 轉換爲負數
        +x: 轉換爲數值
        字符串操作符:沒有符號的操作符,字符串連接
        賦值操作符
        ++ 變量加1
        -- 變量減1
        +=將加的結果賦給變量
        -= 將減的結果賦給變量
        *= 將乘的結果賦給變量
        /+ 將除的結果賦給變量
        %= 將取模的結果賦給量
        ^= 將取冪的結果賦給變量

比較操作符:

  • == 等於
  • != 不等於
  • > 大於
  • > = 大於等於
  • < 小於
  • <= 小於等於
    模式匹配符:
    ~:左邊是否和右邊匹配包含
    !~:是否不匹配

            例子  
    
                       [root@centos6 ~]# cat /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
  • 只取前三行
  •                [root@centos6 ~]# cat /etc/passwd | awk 'NR<=3{print}'
                                                root:x:0:0:root:/root:/bin/bash
                                                bin:x:1:1:bin:/bin:/sbin/nologin
                                                daemon:x:2:2:daemon:/sbin:/sbin/nologi
  • 只取出用戶名 格式爲 name 用戶名

                         [root@centos6 ~]# cat /etc/passwd | awk -F: ' NR<=3{ print "name", $1 }'
                                                        name root
                                                        name bin
                                                        name daemon
  • 取出用戶名及其uid 格式爲 name:用戶名 uid:XXX

                [root@centos6 ~]# cat /etc/passwd | awk -F: ' NR<=3{ printf "name: %-10s uid: %s\n", $1,$3}‘
                                                name: root       uid: 0
                                                name: bin        uid: 1
                                                name: daemon     uid: 2
  • 取出用戶root的信息

              [root@centos6 ~]# cat /etc/passwd | awk -F: ' $1~"root"{ print $0}'
                                                    root:x:0:0:root:/root:/bin/bash
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章