awk 学习 1 内置变量 变量 含义 示例 $0 当前整行内容 print $0 打印整行 $1、$2... 第1、2...个字段 print $1, $3 NF 当前行的字段个数 print NF NR 当前已读的行号(所有文件累计) print NR, $0 FNR 当前文件内的行号(每个文件重置) 处理多文件时区分用 FS 字段分隔符(输入),默认空格 BEGIN{FS=","} OFS 输出字段分隔符,默认空格 BEGIN{OFS="|"} RS 记录分隔符(输入),默认换行符 BEGIN{RS=""} 处理空行分隔 ORS 输出记录分隔符,默认换行符 BEGIN{ORS="\n\n"} 2 模式 类型 语法 示例 含义 空模式 无 {print $1} 每一行都执行 正则表达式 /正则/ /^root/ 匹配该正则的行 表达式 表达式结果非0或非空 $3 > 100 条件为真的行 范围模式 模式1, 模式2 /start/,/end/ 从匹配模式1到模式2的行 特殊模式 BEGIN / END BEGIN{...} 处理前/后执行一次 3 动作 类型 示例 打印/输出 print、printf 变量赋值 sum = $1 + $2 算术/逻辑运算 total += $3 条件判断 if...else、switch 循环 while、for、do...while 数组操作 arr[$1] = $2 流程控制 break、continue、next、exit 函数调用 length($0)、gsub()、srand() 分组 { 多个语句; 用分号隔开 } 4 自定义变量 方式 语法 作用范围 示例 脚本内赋值 变量名 = 值 整个 awk 脚本 sum = 0 -v 选项 awk -v var=value 可在 BEGIN 块中使用 awk -v sep="," '{print $1}' 命令行赋值 awk '脚本' var=value 在读取文件前生效,可动态 awk '{print $1}' max=100 file.txt 5 常见正则 元字符 含义 示例 匹配内容 . 任意单个字符(除换行符) a.c abc、a&c、a c ^ 行首 ^root 以 root 开头的行 $ 行尾 bash$ 以 bash 结尾的行 * 前一个字符重复 0 次或多次 a*b b、ab、aaab ? 前一个字符重复 0 次或 1 次 colou?r color、colour [...] 字符集合中的任意一个 [0-9] 任意数字 [^...] 不在字符集合中的任意一个 [^0-9] 非数字字符 | 或(gawk 支持 | 或 |) error|warning error 或 warning (...) 分组 (abc)+ abc、abcabc {n} 重复 n 次 [0-9]{4} 4 位数字 {n,} 重复至少 n 次 a{2,} aa、aaa、aaaa {n,m} 重复 n 到 m 次 [0-9]{2,4} 2~4 位数字