Linux 中 10 个很棒的 awk 命令示例

awk 是为数据提取、文本处理以及创建格式化报告而开发的最流行的实用程序。 它与 sed 更相似,但比 sed 更强大,因为 sed 在文本处理方面存在局限性。 AWK 的名称没有特定含义,因为它是使用其开发人员 Alfred Aho、Peter J. Weinberger 和 Brian Kernighan 的首字母命名的。

在本文中,我们将学习 10 个你必须知道的很棒的 awk 命令。 我在 student.txt 中创建并添加了以下数据集作为 example. 数据集有 4 列,其中第一个字段包含名字,第二个字段包含第二个名字,第三个字段包含年龄,最后一个包含类。

使用变量打印特定字段

awk 有许多具有各自用途的预构建变量。 使用此命令,我们可以使用 $x 打印所有特定字段数据,其中 x 表示字段编号位置。

$ awk '{print $1, $2}' student.txt

开始变量

BEGIN 变量用于在处理数据之前执行脚本时为结果数据添加标题或标题。 它有助于在格式化数据表时进行索引。 在下面的 example,我打印了一些文本作为索引,然后打印所有学生姓名。

$ awk 'BEGIN {print "Students : "} {print $1}' student.txt

结束变量

END 与 BEGIN 正好相反,因为它在数据处理后执行脚本。 它可用于数据集的最终报告。 在下面的 example,我打印了所有学生年龄,然后打印了一些结束信息。

$ 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

使用多个脚本

我们可以使用分号执行多个脚本。 在下面的 example,我打印了一些文本,然后使用 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 条件。 在下面的 example,我们打印所有年龄在 16 岁以下的学生

$ awk '

BEGIN{

print "Student whose age are under 16 are:"

}

{

if($3<16){

print $1

}

}' student.txt

循环

在下面的 example,我们使用for循环连续打印5个随机数。 为了生成随机数,我们将使用系统内置函数 rand() 函数。 这个函数会生成一个十进制的随机数,所以我们需要乘以 100 得到 1 到 100 的随机数。

$ awk 'BEGIN {

for (i = 1; i <= 5; i++){

print int(100 * rand())

}

}'

结论

在本文中,我们了解了 10 个很棒的 awk 命令和脚本。 我希望你会喜欢这篇文章。