awk 教程:通过 3 个实际示例了解 awk 变量
本文是正在进行的 Awk 教程和示例系列的一部分。 与任何其他编程语言一样,Awk 也有用户定义的变量和内置变量。
在本文中,让我们回顾一下如何定义和使用 awk 变量。
awk 变量应该以字母开头,后面可以包含字母数字字符或下划线。 关键字不能用作 awk 变量 awk 不像其他编程语言那样支持变量声明 在 BEGIN 部分初始化 awk 变量总是更好,它在开始时只执行一次。 awk 中没有数据类型。 将 awk 变量视为数字还是字符串取决于使用它的上下文。 现在让我们回顾几个简单的例子来学习如何使用用户定义的 awk 变量。
awk 示例 1:图书计费
在此示例中,输入文件 bookdetails.txt 包含带有字段的记录 - 项目编号、书籍名称、数量和每本书的价格。
$ cat bookdetails.txt
现在下面的 Awk 脚本,读取并处理上述 bookdetails.txt 文件,并生成报告,显示 - 每本书的销售率,以及所有已售图书的总金额。
到目前为止,我们已经看到 Awk 从命令行读取命令,但是 Awk 也可以使用 -f 选项从文件中读取命令。
语法
$ awk -f script-filename inputfilename
现在我们的用于书籍计费计算的 Awk 脚本如下所示。
$ cat book-calculation.awk
BEGIN {
total=0;
}
{
itemno=$1;
book=$2;
bookamount=$3*$4;
total=total+bookamount;
print itemno," ", book,"\t","$"bookamount;
}
END {
print "Total Amount = $"total;
}
在上面的脚本中,
- awk BEGIN 部分初始化变量 total。 itemno、total、book、bookamount 是用户定义的 awk 变量。
-
在 Awk Action 部分,
Quantity*bookprice
将存储在一个名为 bookamount 的变量中。 每个账面金额将与总数相加。 - 最后在 Awk END 部分,total 变量将具有总量。
现在执行 book-calculation.awk 脚本以生成显示每个图书率和总金额的报告,如下所示。
$ awk -f book-calculation.awk bookdetails.txt
awk 示例 2. 学生分数计算
在此示例中,创建一个输入文件“student-marks.txt”,其中包含以下内容——学生姓名、卷号、Test1 分数、Test2 分数和 Test3 分数。
$ cat student-marks.txt
现在,下面的 awk 脚本将计算并生成报告,以显示每个学生的平均分、Test1、Test2 和 Test3 分数的平均值。
student.awk
BEGIN { test1=0; test2=0; test3=0; print "Name\tRollNo\t Average Score"; } { total=$3+$4+$5; test1=test1+$3; test2=test2+$4; test3=test3+$5; print $1"\t"$2"\t",total/3; } END{ print "Average of Test1="test1/NR; print "Average of Test2="test2/NR; print "Average of Test3="test3/NR; }
在上面的 awk 脚本中,
- 在 Awk BEGIN 部分中,所有 awk 变量都被初始化为零。 test1、test2、test3 和 total 是用户定义的 awk 变量。
- 在 Awk ACTION 部分中,$3、$4、$5 分别是 Test1、Test2 和 Test3 的分数。 总变量是每个学生的 3 个考试成绩相加。 awk 变量 test1、test2 和 test3 具有每个相应测试的总分。
- 因此,在 Awk END 部分中,将每个测试总数除以记录总数(即学生)将为我们得出平均分数。 NR 是一个 Awk 内置变量,它给出输入中的记录总数。
awk 示例 3. 学生详细信息的 HTML 报告
在上面的两个例子中,我们看到了 awk 变量,它的值是数字。 此示例显示了 awk 脚本,用于为学生姓名及其卷号生成 html 报告。
string.awk
BEGIN{ title="AWK"; print "<html>\n<title>"title"</title><body bgcolor=\"#ffffff\">\n<table border=1><th colspan=2 align=centre>Student Details</th>"; } { name=$1; rollno=$2; print "<tr><td>"name"</td><td>"rollno"</td></tr>"; } END { print "</table></body>\n</html>"; }
使用我们在上面示例中创建的相同 student-marks.txt 输入文件。
$ awk -f string.awk student-marks.txt
我们可以存储上面的输出,它给出了下面的 html 表。 在上面的脚本中,名为 name 和 rollno 的变量是字符串变量,因为它是在字符串上下文中使用的。
Student | Details |
---|---|
Jones | 2143 |
Gondrol | 2321 |
RinRao | 2122 |
Edwin | 2537 |
Dayan | 2415 |
相关文章
awk 教程 – 7 个 awk 打印示例
发布时间:2022/10/31 浏览次数:231 分类:操作系统
-
这是新的 awk 教程系列的第一篇文章。我们将在接下来的时间里内发布几篇关于 awk 的文章,这些文章将通过实际示例介绍 awk 的所有功能。在本文中,让我们回顾一下基本的 awk 工作方法