神級命令awk之30分鐘速成必看

重點提要

  1. 動做的左花括號必須與它的模式在同一行; 而剩下的部分, 包括右花括號, 則能夠出如今下面幾行;
  2. 若是一個表達式擁有一個數值形式的值, 而運算符要求一個字符串值, 那麼該數值會自動轉換成字符串, 相似地, 當運算符要求一個數值時, 字符串被自動轉換成數值;
  3. 在一個關係比較中, 若是兩個操做數都是數值, 關係比較將會按照數值比較進行; 不然的話數值操做數會被轉換成字符串, 再將操做數按字符串的形式進行比較兩個字符串間的比較以字符爲單位逐個相比, 字符間的前後順序依賴於機器的字符集(大多數狀況下是ASCII字符集);
  4. 把一個字符串賦值給內建變量FS 就能夠改變字段分隔符. 若是字符串的長度多於一個字符, 那麼它會被當成一個正則表達式. 當前輸入行中, 與該正則表達式匹配的最左, 最長, 非空且不重疊的子字符串變成字段分隔符;

正則表達式

  1. 正則表達式的元字符包括: ^ $ . [ ] | ( ) * + ?
  2. 一個基本的正則表達式包括下面幾種:
    一個不是元字符的字符, 例如A, 這個正則表達式匹配的就是它自己.
    一個匹配特殊符號的轉義字符: t 匹配一個製表符(見表2.2).
    一個被引用的元字符, 例如*, 按字面意義匹配元字符.
    ^ 匹配一行的開始.
    $ 匹配一行的結束.
    . 匹配任意一個字符.
    一個字符類: [ABC] 匹配字符A, B 或C.
    字符類可能包含縮寫形式: [A-Za-z] 匹配單個字母.
    一個互補的字符類: 1 匹配任意一個不是數字的字符.

【注意】使用gsub時,/也須要轉義正則表達式

使用代碼片斷

  • 有效浮點數驗證
BEGIN {
        sign = "[+-]?"
        decimal = "[0-9]+[.]?[0-9]*"
        fraction = "[.][0-9]+"
        exponent = "([eE]" sign "[0-9]+)?"
        number = "^" sign "(" decimal "|" fraction ")" exponent "$"
    }
    $0 ~ number

  1. 0-9
相關文章
相關標籤/搜索