GITHUB
2.1 模式
-
模式汇总
- BEGIN{ statements }
在输入被读取之前,statements执行一次 - END{ statements }
当所有输入读取完毕后,statements被执行一次 - expression{ statements }
当expression为真时,statements被执行一次 - /regular expression/ or compound pattern or pattern1,pattern2 { statements }
当正则被匹配或者复合表达式为真或者范围匹配时,执行后面statements
- BEGIN{ statements }
-
将表达式用作模式
运算符 意义 < 小于 <= 小于或等于 == 等于 != 不等于 >= 大于或等于 > 大于 ~ 匹配 !~ 不匹配 -
字符串匹配模式
- /regrxpr/
当当前输入行包含一段被regrxpr匹配的子字符串时,该模式被匹配 - expression ~ /regexpr/
expression 包含一段被regexpr匹配的子字符串时,该模式被匹配 - expression !~ /regexpr/
不包含被regexpr匹配的子字符串时,模式被匹配
- /regrxpr/
-
正则表达式
- 元字符
\ ^ $ . [ ] | ( ) * + ? - 基本正则表达式
- 一个不是元字符的字符 eg. A
- 一个匹配特殊符号的转义字符 eg. \t
- 一个被引用的元字符 eg. *
- ^ 匹配一行的开始
- $ 匹配一行的结束
- . 匹配任意一个字符
- 一个字符类[ABC] 匹配字符A B 或 C
- 字符类的缩写形式 [A-Za-z] 匹配单个字母
- 一个互补的字符类 [^0-9] 匹配任意一个不是数字的字符
- 运算符组合
- 选择:A|B 匹配A或B
- 拼接:AB 匹配后面紧跟B 的A
- 闭包:A* 匹配0个或者多个A
- 正闭包: A+ 匹配1个或者多个A
- 零或者一: A? 匹配空字符串或者A
- 括号:被(r)匹配的字符串,与r所匹配的字符串相同
- 元字符
-
复合模式
-
范围模式
由第一个匹配成功时开始,到第二个匹配成功时结束
eg. FNR == 1, FNR == 5 {print FILRNAME ": " $0} -
模式总结
模式 | 例子 | 匹配 |
---|---|---|
BEGIN | BEGIN | 输入被读取之前 |
END | END | 输入被读取完之后 |
expression | $3 < 100 | 第三个字段小于100的行 |
string-matching | /Asia/ | 含有Asia的行 |
compound | 4 == "Asia" | 第三个字段小于100 且 第四个字段为Asia |
range | NR == 10, NR == 20 | 输入的第10行至第20行 |
2.2 动作
- 动作
expression 包括常量 变量 赋值 函数调用等等
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
- 内建变量
变量 | 意义 | 默认值 |
---|---|---|
ARGC | 命令行参数个数 | - |
ARGV | 命令行参数数组 | - |
FILENAME | 当前输入文件名 | - |
FNR | 当前输入文件记录个数 | - |
FS | 控制输入行的字段分割符 | " " |
NF | 当前记录的字段个数 | - |
NR | 到目前位置读的记录数量 | - |
OFMT | 数值的输出格式 | "%.6g" |
OFS | 输出字段分隔符 | " " |
ORS | 输出记录的分隔符 | "\n" |
RLENGTH | 被函数match匹配的字符串长度 | - |
RS | 控制输入行的记录分隔符 | "\n" |
RSTART | 被函数match匹配的字符串的开始 | - |
SUBSEP | 下标分隔符 | "\034" |
- 内建算数函数
函数 | 返回值 |
---|---|
atan2(y,x) | y/x的反正切值,定义域在-π 到 π之间 |
cos(x) | x的余弦值,x以弧度为单位 |
exp(x) | x的指数函数 |
int(x) | x的整数部分 |
log(x) | x的自然对数 |
rand() | 返回一个随机数r |
sin(x) | x的正弦值 |
sqrt(x) | x的方根 |
srand(x) | x为新的随机种子 |
- 内建字符串函数
函数 | 描述 |
---|---|
gsub(r,s) | 将$0中的所有出现的r替换为s,返回替换的次数 |
gsub(r,s,t) | 将字符串t中所有出现的r替换为s,返回替换发生的次数 |
index(s,t) | 返回字符串t在s中第一次出现的位置,t没有出现,返回0 |
length(s) | 返回s包含的字符个数 |
- 流程控制语句
- {statements}
语句组 - if (expression) statements
如果expression为真,执行statements - if (expression) statements else statements
如果expression为真,执行statements,否则执行statements - while (expression) statements
如果expression为真,执行statements;然后重复前面过程 - for (expressionl; expression; expression) statements
- for (variable in array) statements
- do statements while (expression)
- break
- continue
- next
- exit
- exit expression
- {statements}
网友评论