====== Programmable Text Processing ====== awk -Fc [ -f fileName ] program { variable = value } * {fileName} * 通常會先講語法放在一個檔案中,然後使用參數 -f 來執行 如果要把語法放在 command 中,要用單引號(')括起來 ===== 語法 ===== [ condition ] [ \{ action \} ] === condition === BEGIN END 或邏輯運算、關係、正規表示式 === action === if() ... [else ...] while() ... for( ; ; ) ... break continue var = expresion print [ list of expressions ] [ > expression ] printf format [ , list of expressions ] [ > expression ] next (忽略此行剩下的輸入文字) exit === 內建變數 === ^ Variable ^ Function ^ | NF |此行的總單字數 number of fields| | NR |印出 awk 目前執行到檔案的第幾行| | $0 |整行| | $n |第 n 個單字| | $NF |最後一個單字| | FILENAME |欲傳給 awk 處理的檔案名稱| == print == 變數間用逗號(,)分隔,輸出會空一個空白,沒用逗號會連在一起 === Extended Regular Expressions === 正規表示式要用斜線(/)括起來 === Condition Ranges === 從字串「begin」開始印,直到遇到「end」 /begin/ , /end/ { print $0 } === 內建函式 === exp() log() sqrt() int() substr(string, from_index, to_index) ===== 參數 ===== --F 指定分割單字的符號(預設是空白或 tab) ===== Example ===== # awk '{ print NF, $0 }' fileName == awk1 == BEGIN { print "Start file: ", FILENAME } { print $1 $3 $NF } END { print "End: " } # awk -f awk1 fileName == 比較 == NR > 1 && NR < 4 { printf "line %d: %s\n", NR, $0 } == awk3 == /t.*e/ { print $0 } == awk4 == 以冒號來分割單字 $ awk -F: '{...}' fileName == awk5 == { for ( i = NF; i >= 1; i-- ) printf "%s ", $i; printf "\n"; } == 搜尋與印出 == 印出內容有 abcde 的行。 $ awk '/abcde/ {print $0}' fileName