举例探讨内置AWK变量的用途

139 阅读4分钟

AWK脚本语言也有一系列内置的特殊变量,为一些预先定义的目的服务。其中一个内置变量是 "NF",它有自己预先定义的功能。本文将通过演示Ubuntu 20.04中的一些相关例子来探讨这个内置AWK变量的用途。

Ubuntu 20.04中的AWK NF

NF "AWK变量用于打印任何提供的文件的所有行中的字段数量。这个内置变量会逐一遍历文件的所有行,并分别打印每行的字段数。要很好地理解这个功能,你必须阅读下面讨论的例子。

在Ubuntu 20.04中演示AWK NF的使用的例子

以下四个例子的设计是为了以一种非常容易理解的方式教你如何使用AWK NF。所有这些例子都是用Ubuntu 20.04操作系统实现的。

例1:打印文本文件中每一行的字段数

在这个例子中,我们想在Ubuntu 20.04中打印一个文本文件的每一行或每一列或每一条记录的字段数。为了向你展示这样做的方法,我们创建了下图中的文本文件。这个文本文件包含了巴基斯坦五个不同城市的每公斤苹果的价格。

一旦我们创建了这个样本文本文件,我们就执行以下命令,在终端打印这个文本文件中每一行的字段数。

$ awk ‘{print NF}’ AppleRates.txt

在这个命令中,我们有 "awk "关键字,表明我们正在运行一个AWK命令,然后是 "print NF "语句,它将简单地遍历目标文本文件的每一行,并将分别打印该文本文件每一行的字段数。最后,我们有该文本文件的名称(其字段要被计算),在我们的例子中是 "AppleRatest.txt"。

由于我们的文本文件中所有五行的字段数完全相同,即2,因此,由于执行了这个命令,所有文本文件行的字段数都被打印出来,这就是相同的数字。这可以从下面的图片中看出。

例2:以可展示的方式打印文本文件每行的字段数

上面讨论的例子中显示的输出结果也可以通过显示文本文件的行号和每行的字段数来很好地呈现。此外,我们还可以用我们选择的任何特殊字符将行号和字段数分开。我们将使用与第一个例子相同的文本文件向你展示这一点。然而,我们在这种情况下要执行的命令将略有不同,其内容如下。

$ awk ‘{print NR, “---”, NF}’ AppleRates.txt

在这个命令中,我们引入了内置的AWK变量 "NR",它将简单地打印我们的目标文本文件中所有行的行号。此外,我们使用了三个破折号,"-"作为特殊字符,将行号与我们提供的文本文件的字段数分开。

这个稍加修改的同一文本文件的输出结果显示在下面的图片中。

例3:打印文本文件每行的第一个和最后一个字段

除了计算所提供的文本文件的所有行的字段数之外,AWK的 "NF "特殊变量也可以用来从所提供的文本文件中提取最后一个字段的实际值。同样,我们使用了与前两个例子中相同的文本文件。然而,在这个例子中,我们想打印文本文件第一个和最后一个字段的实际值。为此,我们执行了以下命令。

$ awk ‘{print $1, $NF}’ AppleRates.txt

在这个命令中,"awk "关键词后面是 "print 1, NF"语句。1美元"这个特殊变量被用来打印我们提供的文本文件的第一个字段或第一列的值,而"NF "语句。1美元 "这个特殊变量被用来打印我们提供的文本文件的第一个字段或第一列的值,而"NF "这个AWK变量被用来打印我们的目标文本文件的最后一个字段或最后一列的值。你需要注意的是,当我们使用 "NF "AWK变量时,它被用来计算每一行的字段数;然而,当它与美元"$"符号一起使用时,它将简单地从提供的文本文件的最后一个字段中提取实际数值。该命令的其余部分与前两个例子中使用的命令大致相同。

在下面显示的输出中,你可以看到我们提供的文本文件的第一个和最后一个字段的实际值已经打印在终端上。你可以看到这个输出与 "cat "命令的输出非常相似,因为我们提供的文本文件中只有两个字段;因此,从某种程度上说,执行上述命令的结果是整个文本文件的内容被打印在终端上。

例4:分离文本文件中缺失字段的记录

有时,文本文件中有些记录有某些缺失的字段,你可能想把这些记录与各方面都完整的记录分开。这也可以通过使用AWK的 "NF "变量来实现。为此,我们创建了一个名为 "ExamMarks.txt "的文本文件,其中包含五个不同学生在三次不同考试中的考试成绩以及他们的姓名。然而,在第三次考试中,有些学生缺席,因此他们的分数没有了。这个文本文件的内容如下。

为了区分缺失字段的记录和完整字段的记录,我们将执行下面的命令。

$ awk ‘{print NR, “--->”, NF}’ ExamMarks.txt

这条命令与我们在第二个例子中使用的命令相同。然而,从下图所示的这个命令的输出中,你可以看到第一条和第四条记录是完整的,而第二条、第三条和第五条记录则含有缺失的字段。

结论

本文的目的是解释AWK的 "NF "特殊变量的用法。我们首先简要地讨论了这个变量的工作原理,之后,我们借助四个不同的例子很好地阐述了这个概念。一旦你很好地理解了所有共享的例子,你将能够使用 "NF "AWK变量来计算字段的总数,并打印所提供文件的最后一个字段的实际值。