说明


awk 是一种用于操作和处理文本文件的强大语言。 当文本文件中采用行记录格式时,它特别有用, 即,当每行(记录)包含多个由定界符分隔的字段时。 即使输入文件不是行记录格式, 您也可以仍然使用 awk 做一些基本的文件和数据处理。 即使没有输入文件,也可以使用 awk 编写编程逻辑进行处理。 简而言之,AWK 是一种可以在完成日常工作中派上用场的强大语言。

Awk 上的学习曲线要比其他任何语言小的多,如果您已经了解 C 编程, 你会体会到学习 AWK 是多么简单和容易。

AWK 最初由三位开发人员编写– A.Aho , B.W.Kernighan and P.Weinberger 。 所以, AWK 这个名字来自于这三位开发者的姓名缩写。

以下是 AWK 的三个变体:

  • AWK是原始的 awk
  • NAWK是新 awk
  • GAWK是 GNU AWK,所有 Linux 发行版都附带 GAWK。这与 AWKNAWK 完全兼容。

本教程涵盖了原始 AWK 的所有基础知识,以及一些仅在 GAWK 中可用的高级功能。 在具有无论安装了 NAWKGAWK 的系统,您仍然可以键入 awk,这将相应地调用 nawkgawk

例如,在 Linux 上,您将看到 awk 是 gawk 的符号链接。因此,在Linux系统上执行 awk(或)gawk 将调用 gawk。

$ ls -l /bin/awk /bin/gawk
lrwxrwxrwx 1 root root 4 Sep 1 07:38 /bin/awk -> gawk
-rwxr-xr-x 1 root root 320416 Mar 14 2019 /bin/gawk 

注意:本教程的大多数awk示例,将使用以下3个格式文件,请在家目录中创建这些文件并使用他们来尝试本教程所展示的awk示例。

employee.txt是一个由逗号分隔的文件,包含 5 名员工记录,格式如下:

employee-number,employee-name,employee-title

创建文件如下:

$ cat << EOF > employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
EOF

items.txt是一个逗号分隔的文本文件,包含 5 条项目记录,采用以下格式:

item-number,item-description,item-category,cost,quantityavailable 

创建文件如下:

$ cat << EOF > items.txt
101,HD Camcorder,Video,210,10
102,Refrigerator,Appliance,850,2
103,MP3 Player,Audio,270,15
104,Tennis Racket,Sports,190,20
105,Laser Printer,Office,475,5
EOF

items-sold.txt是一个由空格分隔的文本文件,包含 5 条项目记录,每条记录针对一个特定商品,其中包含商品编号,后跟该月(过去 6 个月)销售的商品数量。 因此,您将在每条记录中看到 7 个字段。 字段 1 是项目编号。 字段 2 到字段 7 是过去 6 个月内每月销售的商品总数。

以下是items-sold.txt文件的格式:

item-number qty-sold-month1 qty-sold-month2 qty-sold-month3 qty-sold-month4 qty-sold-month5 qty-sold-month6

创建文件如下:

$ cat << EOF > items-sold.txt
101 2 10 5 8 10 12
102 0 1 4 3 0 2
103 10 6 11 20 5 13
104 2 3 4 0 6 5
105 10 2 5 7 12 6
EOF