第一个 `awk` 脚本
深入学习 AWK:从入门到精通
《1.3 第一个 awk 脚本》📘🧩
学习目标 🎯
- 掌握如何编写并运行第一个
awk脚本; - 理解脚本的执行流程与 shebang 的作用;
- 学会使用
chmod设置权限,并通过./直接运行脚本; - 理解不同 Linux 发行版下脚本行为的一致性与注意事项。
核心重点 ✅
| 类别 | 内容 |
|---|---|
| shebang | 使用 #!/usr/bin/awk -f 声明解释器路径 |
| 脚本结构 | 包含 BEGIN, 主体处理逻辑, END 三个部分 |
| 执行方式 | 可以直接运行(需可执行权限)或通过 awk -f script.awk 执行 |
| 文件权限 | 需要赋予执行权限:chmod +x script.awk |
| 输入来源 | 支持标准输入、管道输入和文件输入 |
| 跨平台兼容性 | 在 Ubuntu、CentOS、EulerOS 上行为一致 |
详细讲解 💡
1. 编写第一个 awk 脚本 📝🐧
我们先来写一个最简单的 awk 脚本,用于输出“Hello World”。
🧪 示例:创建 hello.awk
#!/usr/bin/awk -f
BEGIN {
print "Hello World from awk!";
}
📌 说明:
#!/usr/bin/awk -f:这是 shebang 行,告诉系统这个脚本要用/usr/bin/awk来解释执行。-f参数表示接下来的参数是一个脚本文件。BEGIN { ... }:在处理任何输入前执行一次,常用于初始化变量或打印表头。
2. 给脚本添加执行权限 🔐🔑
Linux 默认不会让文本文件具有执行权限。你需要使用 chmod 命令手动添加执行权限:
chmod +x hello.awk
👀 解释:
chmod:更改文件模式位(即权限)+x:增加执行权限hello.awk:目标文件名
你可以用以下命令查看权限变化:
ls -l hello.awk
👀 输出示例:
-rwxr-xr-x 1 ubuntu ubuntu 65 Jun 19 20:40 hello.awk
看到 x 表示你已经成功添加了执行权限。
3. 运行你的第一个 awk 脚本 🚀🛠️
现在你可以直接运行这个脚本:
./hello.awk
👀 输出结果:
Hello World from awk!
🎉 成功!你刚刚完成了人生中第一个 awk 脚本的编写与执行!
4. 更复杂一点的例子:读取文件内容并打印字段 📁📄
我们来写一个稍微复杂的脚本,用于读取 /etc/passwd 文件,并输出用户名和用户 ID。
🧪 示例:创建 user_info.awk
#!/usr/bin/awk -f
BEGIN {
FS=":"; # 设置字段分隔符为冒号
print "Username\tUID";
}
{
print $1 "\t" $3;
}
📌 说明:
FS=":":设置字段分隔符为冒号,因为/etc/passwd是以冒号分隔的。$1是用户名,$3是 UID。print $1 "\t" $3:输出用户名和 UID,中间用 Tab 分隔。
✅ 运行方式一:直接传入文件
./user_info.awk /etc/passwd
👀 输出示例:
Username UID
root 0
daemon 1
bin 2
sys 3
...
✅ 运行方式二:通过管道传入数据
cat /etc/passwd | ./user_info.awk
两种方式都能正常工作,适用于不同的自动化场景。
5. 注意事项与常见问题 🛠️⚠️
❗1. shebang 路径是否正确?
确保第一行是正确的 shebang:
#!/usr/bin/awk -f
你可以通过以下命令确认系统中的 awk 路径:
which awk
如果输出是 /usr/bin/gawk,那你应该改为:
#!/usr/bin/gawk -f
❗2. Windows 用户注意换行格式 ⚠️
如果你是在 Windows 上编辑 .awk 文件后上传到 Linux,可能会遇到换行符错误(\r\n),导致脚本无法运行。
解决方法:
dos2unix user_info.awk
如果没有安装 dos2unix,可以这样安装:
Ubuntu:
sudo apt install dos2unix
CentOS/EulerOS:
sudo yum install dos2unix
❗3. 不同发行版的行为一致性 🐧🐄🛡️
| 功能 | Ubuntu | CentOS | EulerOS |
|---|---|---|---|
| 是否支持 shebang | ✅ | ✅ | ✅ |
默认 awk 版本 |
gawk | gawk | gawk |
是否需要 dos2unix |
如果文件来自 Windows 则需要 | 同上 | 同上 |
| root 权限需求 | 一般不需要 | 有些环境需 sudo | 企业级安全策略可能限制 |
📌 建议:
- 开发时统一使用
gawk,避免版本差异。 - 使用 Linux 或 WSL 编辑脚本文件,避免换行符问题。
- 所有脚本开头都加上 shebang,提高可移植性。
6. 实战演练:自动统计 /etc/passwd 中 UID > 1000 的用户 🧪📊
📝 创建脚本 high_uid.awk
#!/usr/bin/gawk -f
BEGIN {
FS = ":";
count = 0;
print "High UID Users:";
}
$3 > 1000 {
print $1, $3;
count++;
}
END {
print "Total:", count;
}
✅ 运行脚本
chmod +x high_uid.awk
./high_uid.awk /etc/passwd
👀 输出示例:
High UID Users:
ubuntu 1000
john 1001
jane 1002
Total: 3
总结 📋
通过本章的学习,你已经掌握了:
- 如何编写第一个
awk脚本; - 如何使用 shebang 指定解释器;
- 如何给脚本添加执行权限并运行;
- 如何结合实际文件(如
/etc/passwd)进行字段提取; - 不同 Linux 发行版下的行为差异及注意事项;
- 如何处理 Windows 编辑文件带来的换行符问题;
- 实战案例:统计高 UID 用户并输出报表。
你现在已经具备了独立编写和运行 awk 脚本的能力,下一阶段我们将深入讲解 awk 的基础语法结构,包括字段、记录、条件判断等核心概念。
如果你准备好了,请告诉我:“下一章:基础语法!” 我将为你输出下一部分内容。🚀📘✨

浙公网安备 33010602011771号