AWK 常用命令与示例

《常用命令与示例》


🎯 学习目标

  • 理解 printprintf 的区别及使用场景
  • 掌握 AWK 中字段提取的基本技巧
  • 能够在 /etc/passwd 文件中提取用户名、用户ID等关键信息
  • 理解不同 Linux 发行版(Ubuntu、CentOS、EulerOS)中的差异
  • 提升脚本输出的可读性与格式化能力,为后续日志分析打基础

🔑 核心重点

功能 print 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/nologin vs /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 设置输出分隔符提升可读性

✅ 总结

掌握 printprintf 的使用,是编写高效 AWK 脚本的关键一步。它们分别适用于不同的场景:

  • print:适合快速查看、调试、管道传递
  • printf:适合格式化输出、生成报告、可视化数据

通过实战提取 /etc/passwd 中的用户名和 UID,你可以进一步理解如何操作结构化文本,并将其应用于日志分析、权限管理、安全审计等多个实际场景。

继续练习真实文件,配合 grepsortuniq 等命令,你将逐步成长为一名熟练的 Linux 文本处理高手!🚀

posted @ 2025-06-22 22:41  红尘过客2022  阅读(16)  评论(0)    收藏  举报