AWK 常用命令与示例
《常用命令与示例》
🎯 学习目标
- 理解
print和printf的区别及使用场景 - 掌握 AWK 中字段提取的基本技巧
- 能够在
/etc/passwd文件中提取用户名、用户ID等关键信息 - 理解不同 Linux 发行版(Ubuntu、CentOS、EulerOS)中的差异
- 提升脚本输出的可读性与格式化能力,为后续日志分析打基础
🔑 核心重点
| 功能 | printf | |
|---|---|---|
| 自动换行 | ✅ 是 | ❌ 否 |
| 字段分隔符 | 自动加空格 | 手动控制 |
| 对齐方式 | 不支持 | 支持左/右对齐、固定宽度 |
| 转义字符 | ❌ 不支持 | ✅ 支持 \t, \n 等 |
| 适用场景 | 快速调试、简单输出 | 表格展示、日志美化、数据导出 |
📚 详细讲解
一、print:简洁快速输出
基本语法:
awk '{print $1, $2}' filename
$1,$2表示字段- 多个字段之间会自动插入一个空格
- 每次
print会自动换行
示例1:输出用户名和默认 Shell
awk -F: '{print $1, $7}' /etc/passwd
输出片段:
root /bin/bash
daemon /usr/sbin/nologin
...
✅ 特点:
- 简洁直观,适合快速查看内容或作为管道输入下一步处理
二、printf:格式化输出神器
基本语法:
awk '{printf "格式字符串\n", 变量1, 变量2, ...}' filename
常见格式符:
| 格式符 | 含义 |
|---|---|
%s |
字符串 |
%d |
整数 |
%f |
浮点数 |
%.2f |
保留两位小数 |
%5s |
宽度为5的字符串,右对齐 |
%-5s |
左对齐 |
示例1:表格化显示用户名和 UID
awk -F: '{printf "%-10s %5d\n", $1, $3}' /etc/passwd
输出示例:
root 0
daemon 1
...
✅ 特点:
- 控制对齐方式,适合生成报告、表格等
- 更加专业美观,便于人工阅读或自动化处理
三、实战:从 /etc/passwd 提取用户名
1. 使用 print 提取用户名($1)
awk -F: '{print $1}' /etc/passwd
输出示例:
root
daemon
...
📌 说明:
-F:表示以冒号为字段分隔符$1是用户名字段
2. 使用 printf 提取并格式化输出
awk -F: '{printf "用户: %-10s UID: %5d\n", $1, $3}' /etc/passwd
输出示例:
用户: root UID: 0
用户: daemon UID: 1
...
🧪 小贴士:
-
可将输出重定向到文件用于审计或备份:
awk -F: '{printf "%-10s %5d\n", $1, $3}' /etc/passwd > user_list.txt
四、不同 Linux 发行版的 /etc/passwd 差异(Ubuntu vs CentOS vs EulerOS)
| 特性 | Ubuntu | CentOS | EulerOS |
|---|---|---|---|
| 默认字段结构 | 一致(标准格式) | 一致 | 一致 |
| 用户分类 | 系统用户 + 普通用户 | 同上 | 同上 |
| 常见 UID 分段 | 0-999 系统用户;1000+ 普通用户 | 同上 | 同上 |
| 特殊字段 | /sbin/nologin 或 /usr/sbin/nologin |
不同版本略有差异 | 类似 CentOS |
📌 实战建议:
- 若你发现
/etc/passwd中路径不一致(如/sbin/nologinvs/usr/sbin/nologin),不影响字段提取逻辑 - 提取时注意字段顺序即可,无需担心路径细节
五、进阶实战:筛选特定用户类型
场景:只显示 UID >= 1000 的普通用户
awk -F: '$3 >= 1000 {print $1}' /etc/passwd
输出示例:
ubuntu
alice
bob
✅ 应用场景:
- 查找所有非系统账户
- 配合
grep过滤特殊用户组成员
六、结合其他命令提升效率
示例:统计普通用户数量
awk -F: '$3 >= 1000 {count++} END{print count+0}' /etc/passwd
输出示例:
3
说明:
count++统计符合条件的行数END{...}输出最终结果+0避免未匹配时报错
七、调试与优化建议
| 技巧 | 说明 |
|---|---|
head -n 5 /etc/passwd |
查看前几行确认字段位置 |
wc -l |
结合 print 统计总数 |
| `sort | uniq -c` |
BEGIN{OFS="\t"}; {...}; print $1, $3 |
设置输出分隔符提升可读性 |
✅ 总结
掌握 print 和 printf 的使用,是编写高效 AWK 脚本的关键一步。它们分别适用于不同的场景:
print:适合快速查看、调试、管道传递printf:适合格式化输出、生成报告、可视化数据
通过实战提取 /etc/passwd 中的用户名和 UID,你可以进一步理解如何操作结构化文本,并将其应用于日志分析、权限管理、安全审计等多个实际场景。
继续练习真实文件,配合 grep、sort、uniq 等命令,你将逐步成长为一名熟练的 Linux 文本处理高手!🚀

浙公网安备 33010602011771号