AWK chapter2

GITHUB

2.1 模式

  • 模式汇总

    1. BEGIN{ statements }

      在输入被读取之前,statements执行一次
    2. END{ statements }

      当所有输入读取完毕后,statements被执行一次
    3. expression{ statements }

      当expression为真时,statements被执行一次
    4. /regular expression/ or compound pattern or pattern1,pattern2 { statements }

      当正则被匹配或者复合表达式为真或者范围匹配时,执行后面statements
  • 将表达式用作模式

    运算符 意义
    < 小于
    <= 小于或等于
    == 等于
    != 不等于
    >= 大于或等于
    > 大于
    匹配
    !~ 不匹配
  • 字符串匹配模式

    1. /regrxpr/

      当当前输入行包含一段被regrxpr匹配的子字符串时,该模式被匹配
    2. expression ~ /regexpr/

      expression 包含一段被regexpr匹配的子字符串时,该模式被匹配
    3. expression !~ /regexpr/

      不包含被regexpr匹配的子字符串时,模式被匹配
  • 正则表达式

    1. 元字符

      \ ^ $ . [ ] | ( ) * + ?
    2. 基本正则表达式
      1. 一个不是元字符的字符 eg. A
      2. 一个匹配特殊符号的转义字符 eg. \t
      3. 一个被引用的元字符 eg. *
      4. ^ 匹配一行的开始
      5. $ 匹配一行的结束
      6. . 匹配任意一个字符
      7. 一个字符类[ABC] 匹配字符A B 或 C
      8. 字符类的缩写形式 [A-Za-z] 匹配单个字母
      9. 一个互补的字符类 [^0-9] 匹配任意一个不是数字的字符
    3. 运算符组合
      1. 选择:A|B 匹配A或B
      2. 拼接:AB 匹配后面紧跟B 的A
      3. 闭包:A* 匹配0个或者多个A
      4. 正闭包: A+ 匹配1个或者多个A
      5. 零或者一: A? 匹配空字符串或者A
      6. 括号:被(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

你可能感兴趣的:(AWK chapter2)