GITHUB
2.1 模式
-
模式匯總
- BEGIN{ statements }
在輸入被讀取之前,statements執(zhí)行一次 - END{ statements }
當(dāng)所有輸入讀取完畢后,statements被執(zhí)行一次 - expression{ statements }
當(dāng)expression為真時(shí),statements被執(zhí)行一次 - /regular expression/ or compound pattern or pattern1,pattern2 { statements }
當(dāng)正則被匹配或者復(fù)合表達(dá)式為真或者范圍匹配時(shí),執(zhí)行后面statements
- BEGIN{ statements }
-
將表達(dá)式用作模式
運(yùn)算符 意義 < 小于 <= 小于或等于 == 等于 != 不等于 >= 大于或等于 > 大于 ~ 匹配 !~ 不匹配 -
字符串匹配模式
- /regrxpr/
當(dāng)當(dāng)前輸入行包含一段被regrxpr匹配的子字符串時(shí),該模式被匹配 - expression ~ /regexpr/
expression 包含一段被regexpr匹配的子字符串時(shí),該模式被匹配 - expression !~ /regexpr/
不包含被regexpr匹配的子字符串時(shí),模式被匹配
- /regrxpr/
-
正則表達(dá)式
- 元字符
\ ^ $ . [ ] | ( ) * + ? - 基本正則表達(dá)式
- 一個(gè)不是元字符的字符 eg. A
- 一個(gè)匹配特殊符號(hào)的轉(zhuǎn)義字符 eg. \t
- 一個(gè)被引用的元字符 eg. *
- ^ 匹配一行的開始
- $ 匹配一行的結(jié)束
- . 匹配任意一個(gè)字符
- 一個(gè)字符類[ABC] 匹配字符A B 或 C
- 字符類的縮寫形式 [A-Za-z] 匹配單個(gè)字母
- 一個(gè)互補(bǔ)的字符類 [^0-9] 匹配任意一個(gè)不是數(shù)字的字符
- 運(yùn)算符組合
- 選擇:A|B 匹配A或B
- 拼接:AB 匹配后面緊跟B 的A
- 閉包:A* 匹配0個(gè)或者多個(gè)A
- 正閉包: A+ 匹配1個(gè)或者多個(gè)A
- 零或者一: A? 匹配空字符串或者A
- 括號(hào):被(r)匹配的字符串,與r所匹配的字符串相同
- 元字符
復(fù)合模式
范圍模式
由第一個(gè)匹配成功時(shí)開始,到第二個(gè)匹配成功時(shí)結(jié)束
eg. FNR == 1, FNR == 5 {print FILRNAME ": " $0}模式總結(jié)
| 模式 | 例子 | 匹配 |
|---|---|---|
| BEGIN | BEGIN | 輸入被讀取之前 |
| END | END | 輸入被讀取完之后 |
| expression | $3 < 100 | 第三個(gè)字段小于100的行 |
| string-matching | /Asia/ | 含有Asia的行 |
| compound |
|
第三個(gè)字段小于100 且 第四個(gè)字段為Asia |
| range | NR == 10, NR == 20 | 輸入的第10行至第20行 |
2.2 動(dòng)作
- 動(dòng)作
expression 包括常量 變量 賦值 函數(shù)調(diào)用等等
print expression-list
printf(format, expression-list)
if (expression)
statements
if (expression)
statements
else
statements
while (expression)
statements
for (expression; expression; expression)
statements
for (expression in array)
statements
do
statements
while (expression)
break
continue
- 內(nèi)建變量
| 變量 | 意義 | 默認(rèn)值 |
|---|---|---|
| ARGC | 命令行參數(shù)個(gè)數(shù) | - |
| ARGV | 命令行參數(shù)數(shù)組 | - |
| FILENAME | 當(dāng)前輸入文件名 | - |
| FNR | 當(dāng)前輸入文件記錄個(gè)數(shù) | - |
| FS | 控制輸入行的字段分割符 | " " |
| NF | 當(dāng)前記錄的字段個(gè)數(shù) | - |
| NR | 到目前位置讀的記錄數(shù)量 | - |
| OFMT | 數(shù)值的輸出格式 | "%.6g" |
| OFS | 輸出字段分隔符 | " " |
| ORS | 輸出記錄的分隔符 | "\n" |
| RLENGTH | 被函數(shù)match匹配的字符串長(zhǎng)度 | - |
| RS | 控制輸入行的記錄分隔符 | "\n" |
| RSTART | 被函數(shù)match匹配的字符串的開始 | - |
| SUBSEP | 下標(biāo)分隔符 | "\034" |
- 內(nèi)建算數(shù)函數(shù)
| 函數(shù) | 返回值 |
|---|---|
| atan2(y,x) | y/x的反正切值,定義域在-π 到 π之間 |
| cos(x) | x的余弦值,x以弧度為單位 |
| exp(x) | x的指數(shù)函數(shù) |
| int(x) | x的整數(shù)部分 |
| log(x) | x的自然對(duì)數(shù) |
| rand() | 返回一個(gè)隨機(jī)數(shù)r |
| sin(x) | x的正弦值 |
| sqrt(x) | x的方根 |
| srand(x) | x為新的隨機(jī)種子 |
- 內(nèi)建字符串函數(shù)
| 函數(shù) | 描述 |
|---|---|
| gsub(r,s) | 將$0中的所有出現(xiàn)的r替換為s,返回替換的次數(shù) |
| gsub(r,s,t) | 將字符串t中所有出現(xiàn)的r替換為s,返回替換發(fā)生的次數(shù) |
| index(s,t) | 返回字符串t在s中第一次出現(xiàn)的位置,t沒有出現(xiàn),返回0 |
| length(s) | 返回s包含的字符個(gè)數(shù) |
- 流程控制語句
- {statements}
語句組 - if (expression) statements
如果expression為真,執(zhí)行statements - if (expression) statements else statements
如果expression為真,執(zhí)行statements,否則執(zhí)行statements - while (expression) statements
如果expression為真,執(zhí)行statements;然后重復(fù)前面過程 - for (expressionl; expression; expression) statements
- for (variable in array) statements
- do statements while (expression)
- break
- continue
- next
- exit
- exit expression
- {statements}