如何使用 awk 编程语言编写脚本 - 第 13 部分
从 Awk 系列开始到第 12 部分,我们一直在命令行和 shell 脚本中分别编写小型 Awk 命令和程序。
然而,Awk 与 Shell 一样,也是一种解释性语言,因此,根据我们从本系列开始所了解的所有内容,您现在可以编写 Awk 可执行脚本。
与我们编写 shell 脚本的方式类似,Awk 脚本以以下行开头:
#! /path/to/awk/utility -f
例如,在我的系统上,Awk 实用程序位于 /usr/bin/awk 中,因此,我将启动一个 Awk 脚本,如下所示:
#! /usr/bin/awk -f
解释上面这行:
#!
– 称为 Shebang,它指定脚本中指令的解释器/usr/bin/awk
– 是解释器-f
– 解释器选项,用于读取程序文件
也就是说,现在让我们深入研究 Awk 可执行脚本的一些示例,我们可以从下面的简单脚本开始。使用您最喜欢的编辑器打开一个新文件,如下所示:
vi script.awk
并将以下代码粘贴到文件中:
#!/usr/bin/awk -f
BEGIN { printf "%s\n","Writing my first Awk executable script!" }
保存文件并退出,然后通过发出以下命令使脚本可执行:
chmod +x script.awk
此后,运行它:
./script.awk
样本输出
Writing my first Awk executable script!
挑剔的程序员一定会问,“注释在哪里?”,是的,您也可以在 Awk 脚本中包含注释。在代码中编写注释始终是一种良好的编程习惯。
它可以帮助其他程序员查看您的代码,以了解您在脚本或程序文件的每个部分中试图实现的目标。
因此,您可以在上面的脚本中添加注释,如下所示。
#!/usr/bin/awk -f
#This is how to write a comment in Awk
#using the BEGIN special pattern to print a sentence
BEGIN { printf "%s\n","Writing my first Awk executable script!" }
接下来,我们将看一个从文件读取输入的示例。我们要在帐户文件/etc/passwd中搜索名为aaronkilik的系统用户,然后打印用户名、用户ID和用户GID如下:
下面是我们名为 second.awk 的脚本的内容。
#! /usr/bin/awk -f
#use BEGIN sepecial character to set FS built-in variable
BEGIN { FS=":" }
#search for username: aaronkilik and print account details
/aaronkilik/ { print "Username :",$1,"User ID :",$3,"User GID :",$4 }
保存文件并退出,使脚本可执行并执行如下:
chmod +x second.awk
./second.awk /etc/passwd
样本输出
Username : aaronkilik User ID : 1000 User GID : 1000
在下面的最后一个例子中,我们将使用do while语句来打印0-10之间的数字:
下面是我们名为 do.awk 的脚本的内容。
#! /usr/bin/awk -f
#printing from 0-10 using a do while statement
#do while statement
BEGIN {
#initialize a counter
x=0
do {
print x;
x+=1;
}
while(x<=10)
}
保存文件后,像我们之前所做的那样使脚本可执行。然后,运行它:
chmod +x do.awk
./do.awk
样本输出
0
1
2
3
4
5
6
7
8
9
10
概括
我们已经结束了这个有趣的 Awk 系列,作为 Awk 编程语言的介绍,我希望您从所有 13 部分中学到了很多东西。
正如我从一开始就提到的,Awk 是一种完整的文本处理语言,因此,您可以了解 Awk 编程语言的更多其他方面,例如环境变量、数组、函数(内置和用户定义)等。
Awk 编程还有其他部分需要学习和掌握,因此,下面我提供了一些重要在线资源的链接,您可以使用这些资源来扩展您的 Awk 编程技能,这些不一定是您需要的全部,您还可以查看寻找有用的 Awk 编程书籍。
参考链接:GNU Awk 用户指南和 AWK 语言编程
对于您想要分享的任何想法或问题,请使用下面的评论表。请记住始终与Howtoing保持联系以获取更多精彩系列。