1. 程式人生 > >awk的基本概念,基礎用法和高級用法

awk的基本概念,基礎用法和高級用法

awk 基本概念 基礎用法 高級用法

awk:
文本處理三劍客:grep系,sed,awk
grep系:grep,egrep,fgrep,基於PATTERN進行文本過濾;
sed:流編輯器,逐行編輯器;模式空間,保持空間;
awk:報告生成器;格式化文檔輸出;

awk是下面三個人的姓氏縮寫:
    最早由Alfred Aho開發的,曾工作於貝爾實驗室;
    Peter J Weinberger:貝爾實驗室;
    Brian W Kernighan:貝爾實驗室;K&R這兩個人共同編寫了 《C語言程序設計 第二版》
被各種改版的awk:
CentOS/RHEL系:GNU awk,gawk;
New awk,nawk;
Old awk,oawk;

gawk命令:
    gawk - pattern scanning and processing language
    格式:
        gawk [ options ] ‘program‘ file ...
            program:[/PATTERN/]{ACTION statement; ...}
                PATTERN部分:決定動作語句何時觸發以及通過什麽事件來觸發;
                    BEGIN, END

                ACTION statement:對數據進行特定的處理,通常放置在{}中;
                    print, printf

            基本概念:
                分隔符:
                    輸入分隔符:
                        awk對數據進行處理時,會根據特定的標識符號對數據進行分段處理,這種標識符號就稱為"輸入分隔符",默認的輸入分隔符是空白字符;如果指定的分隔符並沒有被數據包括,則只有換行分隔符有效;

                    輸出分隔符:
                        awk對數據處理完成後,會以特定的標識符號對各個字段進行連接後輸出,這種標識符號就稱為"輸出分隔符",默認的輸出分隔符是空白字符;

                記錄:由換行符進行分隔的數據中一行,就稱為一條記錄(Record);通常在使用awk處理數據時,使用內置變量$0來保存整個記錄的內容;

                字段:經過分隔符分隔之後的每一個數據分段,都稱為一個字段(Field);通常在使用awk處理數據時,使用$1,$2...$NF(Number of Field)等內置變量來存儲各個字段的數據;

    awk的工作原理:
        1.首先,執行BEGIN{ACTION statement;...}語句塊中的語句;
        2.其次,從文件中或著標準輸入讀取一行,根據PATTERN的匹配結果執行後面的ACTION語句塊中的內容;然後逐行重復該過程已完成數據處理,直到數據全部被讀取完畢;
        3.最後,在所有的語句塊都執行完成之後,退出awk進程之前,執行END{ACTION statement;...}語句塊中的語句;

        註意:
            1) BEGIN語句塊在awk開始處理數據內容之前就被執行;通常用於生成表頭;此語句塊是可選語句塊;
            2) END語句塊在處理完所有的數據之後,才會被執行;通常用於數據匯總;此語句塊是可選語句塊;
            3) PATTERN語句塊中的通用命令是最重要的部分,因此PATTERN語句塊不能省略,但其中的ACTION可以省略,如果省略,則默認執行print動作,即:顯示數據的各行;
            4) awk在執行PATTERN語句塊時,默認循環遍歷數據中的各個記錄;

    常用選項:
        -f,--file program-file:從指定的文件中加載program語句塊,而不是通過命令行給出相關的程序內容;
        -F,--field-separator fs:指定字段的輸入分隔符;默認是空白字符;
        -v,--assign var=val:用於聲明自定義變量並為變量賦值;

    awk的常用用法:
        1.變量:
         內建變量:
            FS:input field separator,輸入字段分隔符,默認為空白字符;
            OFS:output field separator,輸出字段分隔符,默認為空白字符;
                示例:
                    ~]# awk -v FS=‘:‘ -v OFS=‘:‘ ‘{print $1,$3,$7}‘ /etc/passwd
                    root:0:/bin/bash
                    bin:1:/sbin/nologin
                    daemon:2:/sbin/nologin
                    ...

            RS:The input record separator,輸入記錄(行)分隔符,默認為換行符;
                註意:即使指定了額外的輸入記錄分隔符,原有的換行符依然有效;
            ORS:The output record separator,輸出記錄分隔符,默認為換行符;
                示例:
                    ~]# awk -v RS=‘:‘ -v ORS=‘#‘ ‘{print $0}‘ /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
                    ...

            NF:The number of fields,每一行中的字段的總數;
                示例:
                    ~]# awk -F: ‘{print NF}‘ /etc/passwd
                    7
                    7
                    7
                    7
                    7
                    ...

                        顯示指定文件中每行中的字段的數量;
                    ~]# awk -F: ‘{print $NF}‘ /etc/passwd
                    /bin/bash
                    /sbin/nologin
                    /sbin/nologin
                    /sbin/nologin
                    /sbin/nologin
                    /bin/sync
                    ...

                        顯示指定文件中每行中最後一個字段的內容;
                    ~]# awk -F: ‘{print $(NF-1)}‘ /etc/passwd
                    /root
                    /bin
                    /sbin
                    /var/adm
                    /var/spool/lpd
                    /sbin
                    /sbin
                    ...

                        顯示指定文件中每行中倒數第二個字段的內容;

            NR:The total number of input records,行的總數;如果僅處理一個文件,可以將NR的值當作此文件中各行的行號;
                示例:
                    ~]# awk ‘{print NR}‘ /etc/fstab
                    1
                    2
                    3
                    4
                    5
                    ...

            FNR:The input record number in the current input file,對於不同的文件分別統計其行的數量;即使處理多個文件,也可以顯示每個文件中每行的行號;
                示例:
                    ~]# awk ‘{print FNR}‘ /etc/fstab /etc/issue
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    17
                    18
                    1
                    2
                    3

            FILENAME:The  name  of  the current input file,當前正在被處理的文件的文件名;
                示例:
                    ~]# awk ‘END{print FILENAME}‘ /etc/fstab
                    /etc/fstab

            ARGC:The number of command line arguments,命令行中參數的數量;包括awk命令本身,但不包括awk命令的選項部分和program部分;
                示例:
                    ~]# awk ‘END{print ARGC}‘ /etc/fstab /etc/issue /etc/passwd
                    4

            ARGV:Array of command line arguments,由命令行中所有的參數構成的數組;
                示例:
                    ~]# awk ‘END{print ARGV[1]}‘ /etc/fstab /etc/issue /etc/passwd
                    /etc/fstab
                        顯示命令行中的第N個參數;

        自定義變量:
            定義方式:
                -v var_name=value

                註意:變量名字母大小寫敏感的;

                示例:
                    ~]# awk -v var=‘hello‘ -F: ‘{print $1"," var}‘ /etc/passwd
                    root,hello
                    bin,hello
                    daemon,hello
                    adm,hello
                    ...

        常用的ACTION:
            2.print:Print the current record,以標準格式輸出結果;
                格式:
                    print item1,item2,...

                    註意:
                        1) 各item之間需要使用","進行分隔;
                        2) 輸出的各item可以是字符串,可以是數字,可以是當前記錄中的字段,可以是變量,可以是awk的表達式;
                        3) 如果省略了item,則默認的item為$0,即:輸出整行;

                    示例:
                        ~]# awk ‘{print}‘ /etc/issue
                        CentOS release 6.9 (Final)
                        Kernel \r on an \m

                        ~]# awk ‘{print $1,$3,$NF}‘ /etc/issue
                        CentOS 6.9 (Final)
                        Kernel on \m

            3.printf:Format and print,以特定的格式輸出結果;
                格式:
                    printf "FORMAT" item1,item2,...

                    註意:
                        1) 必須給出合適的輸出格式;
                        2) 默認不會自動換行,如果想要在輸出結果中換行顯示,需要顯式給出換行控制符號,即:\n;
                        3) FORMAT中需要為後面的每一個item單獨指定一個格式化符號;

                    常用的FORMAT:%number+字母 標識這麽多個數字的字符以%字母格式顯示 例:%20s
                        %c:以ASCII碼表中的內容顯示字符信息;
                        %d, %i:顯示十進制整數;
                        %e, %E:以科學計數法來顯示數字;浮點類型;
                        %f, %F:顯示十進制數字的浮點形式;
                        %g, %G:以科學計數法顯示浮點數字;
                        %u:顯示無符號十進制數;
                        %s:顯示字符串;
                        %x, %X:顯示無符號的十六進制整數;
                        %%:顯示%;

                    修飾符:
                        #[.#]:第一個數字用來控制顯示寬度;第二個數字表示小數點的精度;
                            如:%5s, $8.3f

                        -:表示采用左對齊方式顯示;默認是右對齊;
                        +:顯示數字的正負符號;

                        示例:
                            ~]# awk -F: ‘{printf "%20s:%-+5d\n",$1,$3}‘ /etc/passwd
                            root:+0   
                             bin:+1   
                          daemon:+2   
                             adm:+3   
                              lp:+4 
                              ... 
            4.操作符:
                算術運算操作符:
                    雙目運算符必須用兩個數字進行運算:
                        x+y, x-y, x*y, x/y, x^y, x%y
                    單目運算符:
                        -x:將正整數轉換為負整數;
                        +x:將字符串轉換為數值;
                  單目運算符的優先級高於雙目運算符
                    示例:這個示例就是個運算而已後面參數是哪個文件已經無所謂了
                        ~]# awk -F : ‘END{print 100^2}‘ /etc/passwd

                字符串操作符:
                    無任何操作符號時,即為字符串連接操作;

                賦值操作符:
                    =, +=, -=, *=, /=, ^=, %=
                    ++, --

                比較操作符:
                    ==, !=, >, >=, <, <=

                    示例:找到用戶UID為1000的並打印出其用戶名
                        ~]# awk -F : ‘$3>=1000{print $1}‘ /etc/passwd
                        nfsnobody

                模式匹配操作符:
                    ~:操作符左側的字符串是否能夠被右側的PATTERN所匹配;
                    !~:操作符左側的字符串是否不能被右側的PATTERN所匹配;

                    示例:
                        ~]# awk -F : ‘$NF~/bash/{print $0}‘ /etc/passwd
                        root:x:0:0:root:/root:/bin/bash

                邏輯運算操作符:
                    &&
                    ||
                    !
                    示例:
                        ~]#  awk -F: ‘$3>=1000&&$3<=1000000{print $0}‘ /etc/passwd
                        nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

                條件表達式:
                    selector(condition)?if-true-expression:if-false-expression

                    示例:
                        ~]# awk -F: ‘{$3>=1000?usertype="Common User":usertype="SuperUser or Sysuser";printf "%20s: %-20s\n",$1,usertype}‘ /etc/passwd
                                        root: SuperUser or Sysuser
                                         bin: SuperUser or Sysuser
                                      daemon: SuperUser or Sysuser
                                         adm: SuperUser or Sysuser
                                          lp: SuperUser or Sysuser
                                        sync: SuperUser or Sysuser
                                    shutdown: SuperUser or Sysuser
                                        halt: SuperUser or Sysuser
                                        mail: SuperUser or Sysuser
                                        uucp: SuperUser or Sysuser
                                    operator: SuperUser or Sysuser
                                       games: SuperUser or Sysuser
                                      gopher: SuperUser or Sysuser
                                         ftp: SuperUser or Sysuser
                                      nobody: SuperUser or Sysuser
                                        dbus: SuperUser or Sysuser
                                     usbmuxd: SuperUser or Sysuser
                                         rpc: SuperUser or Sysuser
                                       rtkit: SuperUser or Sysuser
                               avahi-autoipd: SuperUser or Sysuser
                                        vcsa: SuperUser or Sysuser
                                        abrt: SuperUser or Sysuser
                                     rpcuser: SuperUser or Sysuser
                                   nfsnobody: Common User         
                                   haldaemon: SuperUser or Sysuser
                                         ntp: SuperUser or Sysuser
                                      apache: SuperUser or Sysuser
                                    saslauth: SuperUser or Sysuser
                                     postfix: SuperUser or Sysuser
                                         gdm: SuperUser or Sysuser
                                       pulse: SuperUser or Sysuser
                                        sshd: SuperUser or Sysuser
                                     tcpdump: SuperUser or Sysuser
                                       named: SuperUser or Sysuser

            5.PATTERN部分:
                1) empty:空模式,不加區分地處理文件的每一行;
                2) [!]/REGEXP/:僅處理[不]能被PATTERN匹配到的行;
                    示例:
                        ~]# awk -F: ‘/^r/{print $0}‘ /etc/passwd
                        root:x:0:0:root:/root:/bin/bash
                        rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
                        rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin
                        rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
                        ~]# awk -F: ‘!/n$/{print $0}‘ /etc/passwd
                        root:x:0:0:root:/root:/bin/bash
                        sync:x:5:0:sync:/sbin:/bin/sync
                        halt:x:7:0:halt:/sbin:/sbin/halt

                3) 關系表達式:
                    $3>=1000
                    $NF~/bash/
                4) 行域,行範圍:
                    關系表達式的邏輯運算:FNR>=10&&FNR<==20
                    示例:
                        ~]# awk ‘NR>=15&&NR<=20{print NR,$0}‘ /etc/passwd
                        15 nobody:x:99:99:Nobody:/:/sbin/nologin
                        16 dbus:x:81:81:System message bus:/:/sbin/nologin
                        17 usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
                        18 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
                        19 rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin
                        20 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

                    /REGEXP1/,/REGEXP2/:
                        從被REGEXP1匹配的行開始,直到被REGEXP2匹配的行結束,這期間的所有行;凡是屬於此類的匹配結果,有多少組就顯示多少組;
                    示例:
                        ~]# awk -F: ‘/^r/,/^a/{print NR,$0}‘ /etc/passwd
                        1 root:x:0:0:root:/root:/bin/bash
                        2 bin:x:1:1:bin:/bin:/sbin/nologin
                        3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
                        4 adm:x:3:4:adm:/var/adm:/sbin/nologin
                        18 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
                        19 rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin
                        20 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
                        23 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
                        24 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
                        25 haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
                        26 ntp:x:38:38::/etc/ntp:/sbin/nologin
                        27 apache:x:48:48:Apache:/var/www:/sbin/nologin

                5) BEGIN/END模式:
                    BEGIN{}
                        僅在開始處理文件中的第一行文本數據之前執行一次的語句塊;多用於輸出特定格式的表頭信息;
                        示例:
                            ~]# awk -F: ‘BEGIN{printf "%20s %10s %20s\n","USERNAME","USERID","SHELL"}NR>=15&&NR<=20{printf "%20s %10s %20s\n",$1,$3,$7}‘ /etc/passwd
                                        USERNAME     USERID                SHELL
                                          nobody         99        /sbin/nologin
                                            dbus         81        /sbin/nologin
                                         usbmuxd        113        /sbin/nologin
                                             rpc         32        /sbin/nologin
                                           rtkit        499        /sbin/nologin
                                   avahi-autoipd        170        /sbin/nologin

                              root: SuperUser or Sysuser
                               bin: SuperUser or Sysuser
                            daemon: SuperUser or Sysuser
                            ...

                    END{}
                        僅在文本處理完成但awk命令尚未退出時執行一次的語句塊;多用於數據信息的匯總;
                            示例:
                                ~]# awk -F: ‘BEGIN{printf "%20s %10s %20s\n","USERNAME","USERID","SHELL"}NR>=15&&NR<=20{printf "%20s %10s %20s\n",$1,$3,$7}END{print "------------------------------------------------------------------\n",NR " users"}‘ /etc/passwd
                                            USERNAME     USERID                SHELL
                                              nobody         99        /sbin/nologin
                                                dbus         81        /sbin/nologin
                                             usbmuxd        113        /sbin/nologin
                                                 rpc         32        /sbin/nologin
                                               rtkit        499        /sbin/nologin
                                       avahi-autoipd        170        /sbin/nologin
                                ------------------------------------------------------------------
                                 34 users

                    註意:
                        1) BEGIN語句塊,PATTERN語句塊和END語句塊的順序,通常來講是:
                            BEGIN{}PATTERN{}END{}
                        2) BEGIN語句塊和END語句塊是可選的,但PATTERN語句塊必須要給出;

            6.常用的ACTIONS
                1) 表達式(Expression)
                2) 組合語句(Compound Statements)
                3) 輸入語句(Input Statements)
                4) 輸出語句(Output Statements)
                5) 控制語句(Control Statements)

            7.控制語句:
                if (condition) statement [ else statement ]
                while (condition) statement
                do statement while (condition)
                for (expr1; expr2; expr3) statement
                for (var in array) statement
                break
                continue
                exit [ expression ]
                switch (expression) { case value|regex : statement ... [ default: statement ] }
                next

                1) if ... else:
                    語法:
                        if (condition) statement [ else statement ]
                        使用場景:對awk取得的整行或某個字段做條件判斷;

                        示例:
                            ~]# awk -F: ‘{if($3>=1000){print "CommonUser:",$1}else{print "Sysuser:",$1}}‘ /etc/passwd
                            Sysuser: root
                            Sysuser: bin
                            Sysuser: daemon
                            Sysuser: adm
                            ...
                            ~]# awk ‘/^[^#]/{if(NF==6){print}}‘ /etc/fstab
                            /dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
                            UUID=f1dc8baa-7d08-4d88-943c-339bae3704f9 /boot                   ext4    defaults        1 2
                            /dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2
                            /dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
                            tmpfs                   /dev/shm                tmpfs   defaults        0 0
                            devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
                            sysfs                   /sys                    sysfs   defaults        0 0
                            proc                    /proc                   proc    defaults        0 0
                            /dev/raid_vg/raid_lv /userhome ext4 defaults 0 0
                        分析磁盤上各個文件系統的空間利用率:
                            ~]# df -h | awk -F% ‘/^\/dev/{print $1}‘ | awk ‘{if($NF>=80){print $1}}‘
                            /dev/sr0

                2) while循環:
                    語法:
                        while (condition) statement
                        使用場景:
                            a.對一行內的多個字段逐一做相同或類似的操作處理時使用;
                            b.對數組中的各數組元素做遍歷處理時使用;

                        while循環的特點:條件為真,進入循環;一旦條件為假,則退出循環;

                        示例:判斷字符串長度
                            ~]# awk ‘{i=1;while(i<=NF){print $i,length($i);i++}}‘ testfile
                            The 3
                            first 5
                            day 3
                            when 4
                            I 1
                            started 7
                            my 2
                            middle 6
                            school 6
                            life, 5
                            I 1
                            felt 4
                            so 2
                            lonely, 7
                            because 7
                            I 1
                            didn’t 6
                            know 4
                            anyone 6
                            who 3
                            was 3
                            around 6
                            me. 3

                3) do ... while語句:
                    語法:
                        do statement while (condition)

                        意義:與while循環相同,但statement語句段至少被執行一次;

                4) for循環:
                    語法:
                        for (expr1; expr2; expr3) statement
                            expr1:variable assignment,變量賦初值;
                            expr2:circle condition,循環條件判斷;
                            expr3:interation process,變量值修正方法;

                            示例:
                                ~]# awk ‘{for(i=1;i<=NF;i++){print $i,length($i)}}‘ testfile
                                The 3
                                first 5
                                day 3
                                when 4
                                I 1
                                started 7
                                my 2
                                middle 6
                                school 6
                                life, 5
                                I 1
                                felt 4
                                so 2
                                lonely, 7
                                because 7
                                I 1
                                didn’t 6
                                know 4
                                anyone 6
                                who 3
                                was 3
                                around 6
                                me. 3
                        for (var in array) statement

                5) switch ... case語句
                    語法:
                        switch (expression) { case value|regex:statement;case value2|regex2:statement;... [ default: statement ] }

                        使用場景:
                            用於進行字符串比較判斷;

                6) break和continue語句:
                    break [n]
                    continue

                    註意:其使用場景是行內多個字段間做循環時的循環控制方式;
                    示例:
                        ~]# awk ‘{for(i=1;i<=NF;i++){if(length($i)<5){continue}else{print $i,length($i)}}}‘ testfile
                        first 5
                        started 7
                        middle 6
                        school 6
                        life, 5
                        lonely, 7
                        because 7
                        didn’t 6
                        anyone 6
                        around 6

                7) next語句:
                    在awk處理數據時,提前結束對當前行的處理,而直接開始處理下一行;

                    示例:
                        ~]# awk -F: ‘{if($3%2==1){next}else{print $1,$3}}‘ /etc/passwd
                        root 0
                        daemon 2
                        lp 4
                        shutdown 6
                        mail 8
                        uucp 10
                        games 12
                        ftp 14
                        rpc 32
                        avahi-autoipd 170
                        nfsnobody 65534
                        haldaemon 68
                        ntp 38
                        apache 48
                        saslauth 498
                        gdm 42
                        sshd 74
                        tcpdump 72
                        或者用下面這種方式也是一樣的
                        ~]# awk -F: ‘{if($3%2==1)next;print $1,$3}‘ /etc/passwd

            8.數組——Array
                用戶自定義的數組,一般使用關聯數組:array_name[index_expression]
                    註意:
                        1) index_expression可以使用任意的字符串,但字符串必須放在雙引號中;
                        2) 支持弱變量數組,即:如果某數組元素事先不存在,當引用該元素時,awk會自動創建此元素,並為此元素賦"空字符串"作為其初始值;

                    示例:
                        ~]# awk ‘BEGIN{name["leader"]="zhangsan";name["mem1"]="lisi";name["mem2"]="bob";print "Leader:",name["leader"],"Member:",name["mem1"],name["mem2"]}‘
                        Leader: zhangsan Member: lisi bob

                        ~]# awk ‘BEGIN{name["leader"]="zhangsan";name["mem1"]="lisi";name["mem2"]="bob";for(i in name){print name[i]}}‘
                        lisi
                        bob
                        zhangsan

                        查看當前系統上所有服務的不同TCP狀態的連接數量的統計:
                            ~]# netstat -nalt | awk ‘/^tcp\>/{state[$NF]++}END{for(stat in state){printf "%15s: %-10d\n",stat,state[stat]}}‘
                                ESTABLISHED: 1         
                                     LISTEN: 12 

                        用於統計本服務器web站點的每個用戶的請求數值:
                            ~]# awk ‘{ipaddr[$1]++}END{for(ip in ipaddr){print ip,ipaddr[ip]}}‘ /var/log/httpd/access_log

                        用於統計本服務器web站點的UV值:
                            ~]# awk ‘{ipaddr[$1]++}END{for(ip in ipaddr){print ip,ipaddr[ip]}}‘ /var/log/httpd/access_log | wc -l

            9.函數:
                內建函數:
                    數值函數:Numeric Functions
                        rand():返回一個介於0到1之間的隨機數;
                        sqrt():對於指定的數值進行開二次方;

                    字符串函數:String Functions
                        length():計算給定字符串的長度;
                        gsub(r, s [, t]):以r表示的模式來查找t表示的字符串中能夠被匹配的內容,並將所有出現的內容替換成s表示的內容;
                        split(s, a [, r [, seps] ]):以seps作為分隔符,利用r表示的模式進行匹配,將s代表的字符串分割之後,保存在a表示的數組中;

                自定義函數:
                    function name(parameter list) { statements }

awk的基本概念,基礎用法和高級用法