awk 教程:通过 3 个实际示例了解 awk 变量

本文是正在进行的 Awk 教程和示例系列的一部分。 与任何其他编程语言一样,Awk 也有用户定义的变量和内置变量。

在本文中,让我们回顾一下如何定义和使用 awk 变量。

awk 变量应该以字母开头,后面可以包含字母数字字符或下划线。 关键字不能用作 awk 变量 awk 不像其他编程语言那样支持变量声明 在 BEGIN 部分初始化 awk 变量总是更好,它在开始时只执行一次。 awk 中没有数据类型。 将 awk 变量视为数字还是字符串取决于使用它的上下文。 现在让我们回顾几个简单的例子来学习如何使用用户定义的 awk 变量。

awk 示例 1:图书计费

在此示例中,输入文件 bookdetails.txt 包含带有字段的记录 – 项目编号、书籍名称、数量和每本书的价格。

$ cat bookdetails.txt

awk 教程:通过 3 个实际示例了解 awk 变量

现在下面的 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 教程:通过 3 个实际示例了解 awk 变量

在上面的脚本中,

  • 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 教程:通过 3 个实际示例了解 awk 变量

awk 示例 2. 学生分数计算

在此示例中,创建一个输入文件“student-marks.txt”,其中包含以下内容——学生姓名、卷号、Test1 分数、Test2 分数和 Test3 分数。

$ cat student-marks.txt

awk 教程:通过 3 个实际示例了解 awk 变量

现在,下面的 awk 脚本将计算并生成报告,以显示每个学生的平均分、Test1、Test2 和 Test3 分数的平均值。

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 教程:通过 3 个实际示例了解 awk 变量

在上面的 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 报告。

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

awk 教程:通过 3 个实际示例了解 awk 变量

我们可以存储上面的输出,它给出了下面的 html 表。 在上面的脚本中,名为 name 和 rollno 的变量是字符串变量,因为它是在字符串上下文中使用的。

Student Details
Jones 2143
Gondrol 2321
RinRao 2122
Edwin 2537
Dayan 2415