第一个 `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 的基础语法结构,包括字段、记录、条件判断等核心概念。

如果你准备好了,请告诉我:“下一章:基础语法!” 我将为你输出下一部分内容。🚀📘✨

posted @ 2025-06-19 23:06  红尘过客2022  阅读(42)  评论(0)    收藏  举报