Linux 上 AWK 编程语言指南
简介
AWK 是一种用于 Linux 文本处理的脚本语言。它旨在处理文本文件中的数据,是数据分析和管理任务的理想工具。凭借一系列内置函数和运算符,AWK 可以执行简单的搜索和替换任务,也可以执行复杂的数据转换。其简洁的语法和多功能性使其能够轻松操作文本文件。对于在 Linux 环境中处理文本文件的用户来说,AWK 是一款强大的工具。
我们将提供一份 Linux 上 AWK 编程语言的初学者指南。我们将介绍该语言的基本语法、可以使用 AWK 执行的不同类型的操作以及如何使用 AWK 处理文本文件。我们还将为所涵盖的每个操作提供代码示例和输出。
在 Linux 操作系统中安装 AWK
安装 AWK 的一种方法是使用我们 Linux 发行版提供的软件包管理器。安装命令如下:-
$ sudo apt-get install gawk
安装完成后,我们可以在 Linux 中检查 AWK 的版本:-
$ awk --version
如果已安装 AWK,该命令将显示版本号。
AWK 编程语言中的变量
AWK 提供了许多内置变量,可用于模式和操作。最常用的变量有:-
NR - 表示当前记录(行)号
NF - 表示输入记录中的字段总数。
$0 - 表示当前整个记录。
$1, $2, $3, … - 表示当前记录中的第一个、第二个、第三个……字段。
除了这些内置变量外,AWK 还允许用户定义变量。可以使用 = 运算符为用户定义的变量赋值。
AWK 命令行选项
通常使用 awk 命令从命令行调用 AWK,该命令接受各种选项和参数。以下是常用选项的列表 -
-F - 指定输入文件的字段分隔符。
-v - 设置变量的值。
-f - 指定要执行的 AWK 脚本文件。
-n - 禁用自动打印行。
-W - 启用警告。
使用 AWK 从文件中提取字段
假设我们有一个名为"filename.csv"的 CSV 文件名,其格式如下 -
name, age, gender Papan, 22, Male Priya, 27, Female
要提取年龄和性别字段,我们可以使用以下命令 -
$ awk -F, '{ print $2, $3 }' filename.csv
此 AWK 代码将打印名为"filename.csv"的 CSV 文件的第二和第三个字段(列),分隔符为逗号 (',')。
以下是解释 -
'awk' - 用于运行 AWK 脚本的命令
'-F,' - 此选项将字段分隔符设置为逗号。这告诉 AWK 将 CSV 文件视为使用逗号作为字段之间的分隔符。
" ' { print $2, $3 }' " − 这是 AWK 脚本本身。它告诉 AWK 打印文件中每行的第二个和第三个字段,并用空格分隔。
age gender 22 Male 27 Female
此命令将字段分隔符设置为逗号 (-F,),并打印文件中每行的第二个和第三个字段 ($2, $3)。
使用 AWK 命令过滤数据
我们有一个名为"data.txt"的文件,其中包含学生的姓名、年龄和年级等信息。我们只想筛选出成绩为"A"的学生。
示例
将以下内容放入"data.txt"文件中 -
John, 18, A Sara, 19, B Mike, 20, A Lisa, 18, C Tom, 19, A
为了筛选出成绩为"A"的学生,我们可以使用以下 AWK 命令 -
$ awk '$3=="A" {print}' data.txt
输出
John, 18, A Mike, 20, A Tom, 19, A
如我们所见,只有等级为"A"的行被打印出来。
示例
我们还可以使用 AWK 命令中的 if 语句来执行更复杂的过滤。例如,如果我们只想筛选出年龄超过 18 岁且成绩为"A"的学生,我们可以使用以下 AWK 命令 -
$ awk '$2>18 && $3=="A" {print}' data.txt
输出
Mike, 20, A Tom, 19, A
我们可以看到,只有同时满足两个条件的行被打印出来了。
使用 AWK 命令实现 for 循环
共有 3 个循环 -
while 循环
do-while 循环
for 循环
这里我们实现仅限"for 循环"。
首先创建一个"input.txt"文件并输入以下内容 -
Soumen,25 Bob,30 Papan,22 Aditya,40 Joy,35
现在,让我们探索如何在 AWK 中使用循环来处理此文件中的数据。
创建另一个文件名"program.awk"
以下 AWK 程序使用 for 循环打印文件的每一行 -
{
for (i = 1; i <= NF; i++) {
printf("%s ", $i);
}
printf("
");
}
在此程序中,模式为空白,这意味着该操作将应用于文件的每一行。该操作由一个 for 循环组成,该循环使用 NF(字段数)变量遍历行中的每个字段(列)。在循环内部,使用 printf 函数打印每个字段,后跟一个空格。循环结束后,再次使用 printf 函数打印换行符。
要运行此程序,我们可以使用以下命令 -
$ awk -F, -f program.awk input.txt
其中"program.awk"是 AWK 程序的文件名,"-F"指定字段分隔符为逗号。
Soumen,25 Bob,30 Papan,22 Aditya,40 Joy,35
我们可以看到它打印了"input.txt"文件中的所有行。
结论
本文介绍了 Linux 上的 AWK 编程语言,并提供了实用的代码示例及其相应的输出。AWK 是一款高效的文本数据处理工具,可用于从中提取相关信息。本指南涵盖了 AWK 的基本编程概念,包括循环。掌握这些知识后,我们将能够在 Linux 上创建自己的 AWK 程序。
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

