目錄表

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)

參數

  1. -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