歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Shell腳本之awk文本編輯器語法

AWK  ——是一種用於處理文本的編程語言工具。
    英文原義:Aho、Weinberger、Kernighan
    中文釋義:三位創造者Aho、Weinberger和Kernighan統稱

    AWK 在很多方面類似於 shell 編程語言,盡管 AWK 具有完全屬於其本身的語法。最初創造 AWK 時,其目的是用於文本處理,並且這種語言的基礎是,只要在輸入數據中有模式匹配,就執行一系列指令。該實用工具掃描文件中的每一行,查找與命令行中所給定內容相匹配的模式。如果發現匹配內容,則進行下一個編程步驟。如果找不到匹配內容,則繼續處理下一行。

    awk 之所以成為一種優秀的程序設計語言的原因之一是內置函數的使用,awk定義並支持了一系列的內置函數,由於這些函數的使用,使得awk提供的功能更為完善和強大。

常用語法:
    awk    [options]    'commands'        testfiles
   
options選項
    -F    定義字段分隔符,默認分隔符為連續空格或制表符
        用$1,$2,$3等順序表示files中每行以間隔符號分隔的各列不同域
    -v    定義變更並賦值,也可以借用次方式從shell變量中引入變量
使用示例:
[root@localhost test]# awk -F":" '{print $1,$7}' testfile
        以冒號作為分隔符,打印第1和第7個字段
[root@localhost test]# awk -F"[:/]" '{print $1,$7}' testfile
        以冒號或斜槓 / 作為分隔符,打印第1第7個字段
[root@localhost test]# awk -F":/" '{print $1,$7}' testfile
        以冒號加斜槓 “:/”整體作為分隔符
       
-----------------------------------------------------------   
command
    讀前處理    行處理        讀後處理
        1、讀前處理    BEGIN{awk_cmd1;awk_cmd2;}
        2、行處理:定址    命令
        定址方法:正則,變量,比較,關系運算
                正則需要用 / / 包裹起來
        常用正則:
            ^    行首                $    行尾
              .    除了換行符以外的任意單個字符
              *    前導字符的零個或多個
              .*    所有字符
              []    字符組內的任一字符
              [^]    對字符組內的每個字符取反(不匹配字符組內的每個字符)
              ^[^]    非字符組內的字符開頭的行
              [a-z] 小寫字母
              [A-Z] 大寫字母
              [a-Z] 小寫和大寫字母
              [0-9] 數字
              \<    單詞頭,以空格或特殊字符做分隔,連續的字符串被當做單詞
              \>    單詞尾

        擴展正則
              ?        前導字符零個或一個
              +        前導字符一個或多個
              abc|def        abc或def
              a(bc|de)f        abcf 或 adef
              x\{m\}          x出現m次
              x\{m,\}          x出現m次至多次(至少m次)
              x\{m,n\}        x出現m次至n次

        NR變量定址,NR 表示AWK讀入的行數
        FNR表示讀入行所在文件中的行數
       
        邏輯運算——可直接引用域進行運算
            ==    >=    <=    !=    >    <    ~    !~
            如:# awk 'NR==1 {print}'  /etc/passwd
                    root:x:0:0:root:/root:/bin/bash
                           
        命令    如:{print $1,$2}
       
    3、讀後處理
        END {awk_cmd1;awk_cmd2;}

---------------------------------------------------------------
AWk的變量
    NR    AWK處理的總行數
    FNR  AWK處理的當前文件的行數,非全部
    FS    字段分隔符,默認為連續空格或制表符,可以使用多個不同的符號做分隔符,也可在options出使用  -F[:/]    指定分隔符
    OFS  輸出字符的分隔符 默認是空格
            如:# awk -F: 'OFS="***" {print $1,$2}' /etc/passwd
                      root***x
    NF    當前讀入行的字段個數
    ORS  輸出行的分隔符,默認是換行
        # awk -F: 'ORS="***" {print $1,$2}' /etc/passwd
        root x***bin x***
    FILENAME    當前文件名

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2013-11/92787p2.htm

Copyright © Linux教程網 All Rights Reserved