awk 學習總結

nongnong發表於2019-12-10

這是我在http://www.zsythink.net/archives/1336 的部落格的一些摘抄 寫等挺細緻的 謝謝他
awk 的格式 awk [options] 'Pattern{Action}' file
pattern有 begin end 特殊模式 模式即為條件
action 有print printf "指定的格式" "文字1" "文字2" "文字3" .
option 有F# 或這 -v FS=’#‘ -v OFS=':'

  1. $NF 和 NF 要表達的意思是不一樣的,對於awk來說,$NF表示最後一個欄位,NF表示當前行被分隔符切開以後,一共有幾個欄位。
  2. $1這種內建變數的外側不能加入雙引號,否則$1會被當做文字輸出
  3. awk '{print $1 $2}' 連線在一起輸出。awk '{print $1,$2}' 以輸出分隔符隔開後顯示
  4. FS:輸入欄位分隔符, 預設為空白字元
    OFS:輸出欄位分隔符, 預設為空白字元
    RS:輸入記錄分隔符(輸入換行符), 指定輸入時的換行符
    ORS:輸出記錄分隔符(輸出換行符),輸出時用指定符號代替換行符
    NF:number of Field,當前行的欄位的個數(即當前行被分割成了幾列),欄位數量
    NR:行號,當前處理的文字行的行號。
    FNR:各檔案分別計數的行號
    FILENAME:當前檔名
    ARGC:命令列引數的個數
    ARGV:陣列,儲存的是命令列所給定的各引數
  5. awk就是這麼規定的,'pattern{ action }'並不被看做是引數,awk被看做為引數。ARGV[0] 是awk ARGV[1] 是後面的檔案
  6. 方法一:-v varname=value(shell傳參) 變數名區分字元大小寫。方法二:在program中直接定義(一半在begin裡面定義)。
  7. awk 'NF==5{print $0}' test2 、空模式(匹配所有行)2、關係運算模式3、BEGIN/END模式 4 正則模式 5 行模式
  8. 當awk中使用了END模式時,如果執行了exit語句,那麼exit語句之後的所有動作都將不會再被執行,END模式中的動作除外。
  9. 除了能夠使用"exit命令"結束"整個awk",還能夠使用"next命令"結束"當前行"
  10. 最常用的算數函式有rand函式、srand函式、int函式
    11.sub函式的作用理解為指定範圍內的單次替換,只替換第一次匹配到的字元。 或者省略gsub函式中的第三個引數,省略gsub中的第三個引數時,預設為"$0",
    可以使用語法  "if(下標 in 陣列名)" ,從而判斷陣列中是否存在對應的元素。
本作品採用《CC 協議》,轉載必須註明作者和本文連結