[ad_1]
awk 是为数据提取、文本处理以及创建格式化报告而开发的最流行的实用程序。 它与 sed 更相似,但比 sed 更强大,因为 sed 在文本处理方面存在局限性。 AWK 的名称没有特定含义,因为它是使用其开发人员 Alfred Aho、Peter J. Weinberger 和 Brian Kernighan 的首字母命名的。
在本文中,我们将学习 10 个你必须知道的很棒的 awk 命令。 我在 student.txt 中创建并添加了以下数据集作为示例。 数据集有 4 列,其中第一个字段包含名字,第二个字段包含第二个名字,第三个字段包含年龄,最后一个包含类。
使用变量打印特定字段
awk 有许多具有各自用途的预构建变量。 使用此命令,我们可以使用 $x 打印所有特定字段数据,其中 x 表示字段编号位置。
$ awk '{print $1, $2}' student.txt
开始变量
BEGIN 变量用于在处理数据之前执行脚本时为结果数据添加标题或标题。 它有助于在格式化数据表时进行索引。 在以下示例中,我打印了一些文本作为索引,然后打印所有学生姓名。
$ awk 'BEGIN {print "Students : "} {print $1}' student.txt
结束变量
END 与 BEGIN 正好相反,因为它在数据处理后执行脚本。 它可用于数据集的最终报告。 在下面的示例中,我打印了所有学生年龄,然后打印了一些结束消息。
$ awk '{print $3} END { print "These are student age " } ' student.txt
文件分隔符
空格和制表符空格是 awk 命令的默认分隔符,但是我们可以根据逗号、斜杠等其他分隔符来分隔文本。为此,我们需要在命令中添加 -F 标志并在单引号中添加分隔符.
$ awk -F':' '{print $1}' /etc/passwd
从文件运行脚本
我们也可以从文件中执行 awk 脚本,这为我们提供了高效创建报告的趋势。 为此,您需要创建文件,然后编写脚本并使用 awk 命令执行它。 对于演示,您可以创建一个文件名 demo_script 并复制粘贴以下脚本。
$ vi demo_script { sum+=$3 } END { print("Sum of all student age is", sum) }
awk 命令提供了一个 -f 标志,用于从文件执行脚本。
$ awk -f demo_script student.txt
使用多个脚本
我们可以使用分号执行多个脚本。 在下面的示例中,我打印了一些文本,然后使用 awk 管道输出并打印出修改后的结果。
$ echo "Hello, Dr. John" | awk '{$3="George"; print $0}'
计算行数
我们可以使用 NR 变量将编号分配给报告,该变量是 awk 内置变量,可自动将行号打印到报告中。
$ awk '{print NR "t" $0}' student.txt
统计字段数
有时,在准备数据时,我们忘记在特定列中添加数据,这可能会导致报表出现异常。 我们可以使用 NF 变量对字段进行计数,这使我们更容易查看和安排报告。
$ awk '{print NR".",$0 "n Count=" NF}' student.txt
如果条件
我们可以在准备条件报告时使用 if 条件。 在下面的示例中,我们打印所有年龄在 16 岁以下的学生
$ awk ' BEGIN{ print "Student whose age are under 16 are:" } { if($3<16){ print $1 } }' student.txt
循环
在下面的示例中,我们使用 for 循环连续打印 5 个随机数。 为了生成随机数,我们将使用系统内置函数 rand() 函数。 这个函数会生成一个十进制的随机数,所以我们需要乘以 100 得到 1 到 100 的随机数。
$ awk 'BEGIN { for (i = 1; i <= 5; i++){ print int(100 * rand()) } }'
结论
在本文中,我们了解了 10 个很棒的 awk 命令和脚本。 我希望你会喜欢这篇文章。
[ad_2]