awk分支判断本质是“按行匹配+条件执行”,默认处理所有行,条件匹配则执行对应动作;核心用if/else if/else或三目运算符控制逻辑,结合字段比较、正则匹配及内置变量实现精准筛选。

Linux 中 awk 的分支判断本质是“按行匹配 + 条件执行”,不写条件就默认处理所有行,写了条件就只对满足的行运行对应动作。核心在于用 if、else if、else 或三目运算符控制逻辑走向,配合字段比较、正则匹配和内置变量实现精准筛选。
单条件判断:只处理满足条件的行
最常用也最简洁的方式,适合简单过滤或标记。
- 语法有两种写法:一种是显式
if块,另一种是省略if的“模式+动作”形式 - 例如提取工资在 1300 到 1700(含 1300,不含 1700)之间的员工编号和姓名:
awk -F"," '$6 >= 1300 && $6
等价写法(带 if):
awk -F"," '{if ($6 >= 1300 && $6
注意:带 if 必须用大括号包裹整个语句;不带 if 时,条件写在动作前、用空格隔开,更符合 awk 风格。
多分支判断:用 if-else if-else 处理不同情况
当需要对同一字段做多个区间或状态分类时,避免嵌套,直接用 else if 层层展开。
- 每条分支独立判断,顺序执行,第一个为 true 就进入对应块,后续不再检查
- 常见于日志分析,比如根据 HTTP 状态码分类输出:
awk '{if ($9 == 200) print "OK:", $7; else if ($9 >= 400 && $9
其中 是状态码字段, 是请求路径。这种写法可清晰区分成功、客户端错误、服务端异常等场景。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
正则匹配判断:用 ~ 和 !~ 实现模糊条件
当条件不是数值大小,而是文本特征(如包含关键词、以某字符开头、符合某种格式),优先用正则。
-
~ /pattern/表示匹配,!~ /pattern/表示不匹配 - 支持基础正则语法,如
^(行首)、$(行尾)、[a-z]、+等
例如提取所有以 “error” 开头的系统日志行:
awk '$0 ~ /^error/ {print NR ": " $0}' syslog.log
或者跳过注释行(以 # 开头)和空行:
awk '!/^#/ && NF > 0 {print}' config.conf
三目运算符:一行内完成二选一赋值
适合简单双路分支,尤其用于生成新字段或打标签,代码紧凑易读。
- 格式:
condition ? value_if_true : value_if_false - 结果可直接参与 print 或赋给变量
例如为每行添加工资等级标签:
awk -F"," '{level = $6
这里用了嵌套三目,先判是否小于 1000,否则再判是否小于 2000,逻辑清晰且无需多行 if。

















