4.0 基本语法和基本操作
4.1. 调用 AWK 程序
AWK 程序主要有两种执行方式:直接从命令行执行,用于简单的单次任务;或者从脚本文件执行,用于更复杂或可重用的逻辑。本节将介绍这两种调用方法,并介绍字段选择和模式匹配等基础操作。
4.2.调用方法
命令行调用
这种方法最适合编写短脚本。整个程序以字符串形式用单引号括起来。
- 语法: awk [选项] '程序' 文件…
例如,要打印 marks.txt 的全部内容,我们可以使用 print 操作:
[jerry]$ awk '{print}' marks.txt
输出:
1) Amit 物理 80
2) Rahul Maths 90
3) Shyam 生物学 87
4) Kedar English 85
5)哈里历史89
脚本文件调用
对于较长或可重复使用的脚本,最好将 AWK 命令放在一个文件中。-f 选项告诉 AWK 从该文件中读取程序。
- 语法: awk [选项] -f 文件 …
首先,创建一个名为 command.awk 的文件,内容如下:
{打印}
现在,使用 -f 标志执行它:
[jerry]$ awk -f command.awk marks.txt
输出:
1) Amit 物理 80
2) Rahul Maths 90
3) Shyam 生物学 87
4) Kedar English 85
5)哈里历史89
4.3. 核心操作示例
让我们使用 marks.txt 文件来探索 AWK 的一些最常用操作。
打印特定字段(列)
AWK 会自动根据空格将每条记录拆分成多个字段。这些字段可以通过语法 `$n` 访问,其中 `$1` 是第一个字段,`$2` 是第二个字段,依此类推。以下命令仅打印第三列和第四列,列之间用制表符分隔。
[jerry]$ awk '{print $3 “\t” $4}' marks.txt
输出:
物理学80
数学90
生物学87
英文85
历史89
图案匹配和记录打印
AWK 可以过滤记录,只打印符合指定模式的记录。$0 是一个特殊变量,代表整条记录。以下命令会打印所有包含字母 a 的行。
[jerry]$ awk '/a/ {print $0}' marks.txt
如果没有提供操作块,AWK 的默认操作是打印匹配的行({print $0})。因此,该命令可以简写为:
[jerry]$ awk '/a/' marks.txt
输出:
2) Rahul Maths 90
3) Shyam 生物学 87
4) Kedar English 85
5)哈里历史89
结合模式匹配和字段选择
您可以将模式匹配与字段选择结合起来,仅打印与模式匹配的行中的特定列。
[jerry]$ awk '/a/ {print $3 “\t” $4}' marks.txt
输出:
数学90
生物学87
英文85
历史89
执行简单计算
AWK 可以根据模式执行操作。以下脚本统计包含字母 a 的行数。每次匹配成功,计数器 cnt 都会在脚本主体中递增,最终结果会在 END 代码块中打印出来。
[jerry]$ awk '/a/{++cnt} END {print “Count = “, cnt}' marks.txt
输出:
计数 = 4
使用内置函数进行条件判断
可以使用内置函数来构建条件模式。`length()` 函数返回字符串的长度。以下命令仅打印长度超过 18 个字符的行。
[jerry]$ awk 'length($0) > 18' marks.txt
输出:
3) Shyam 生物学 87
4) Kedar English 85
这些基本操作展现了 AWK 的强大功能。要解锁更复杂的逻辑,我们必须探索 AWK 提供的内置变量。