AWK - 基本示例

本章介绍了几个有用的 AWK 命令及其适当的示例。 考虑一个要处理的文本文件 marks.txt 包含以下内容 −

1) Amit     Physics   80
2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

打印列或字段

您可以指示 AWK 仅打印输入字段中的某些列。 以下示例演示了这一点 −

示例

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

在执行此代码时,您会得到以下结果 −

输出

Physics   80
Maths     90
Biology   87
English   85
History   89

在文件 marks.txt 中,第三列包含主题名称,第四列包含在特定主题中获得的分数。 让我们使用 AWK 打印命令打印这两列。 在上面的示例中,$3 和 $4 分别代表输入记录中的第三个和第四个字段。


打印所有行

默认情况下,AWK 打印所有匹配模式的行。

示例

[jerry]$ awk '/a/ {print $0}' marks.txt

在执行此代码时,您会得到以下结果 −

输出

2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

在上面的示例中,我们正在搜索表单模式 a。 当模式匹配成功时,它会从主体块执行命令。 在没有主体块的情况下 − 采取默认操作,即打印记录。 因此,以下命令产生相同的结果 −

示例

[jerry]$ awk '/a/' marks.txt

按模式打印列

当模式匹配成功时,AWK 默认打印整条记录。 但是您可以指示 AWK 仅打印某些字段。 例如,以下示例在模式匹配成功时打印第三个和第四个字段。

示例

[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt

在执行此代码时,您会得到以下结果 −

输出

Maths    90
Biology  87
English  85
History  89

以任意顺序打印列

您可以按任何顺序打印列。 例如,以下示例打印第四列,然后是第三列。

示例

[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt

在执行上述代码时,您会得到以下结果 −

输出

90   Maths
87   Biology
85   English
89   History

计数并打印匹配的模式

让我们看一个示例,您可以在该示例中计算和打印模式匹配成功的行数。

示例

[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt

在执行此代码时,您会得到以下结果 −

输出

Count = 4

在这个例子中,当模式匹配成功时我们增加 counter 的值,并在 END 块中打印这个值。 请注意,与其他编程语言不同,在使用变量之前无需声明变量。


打印超过 18 个字符的行

让我们只打印那些包含超过 18 个字符的行。

示例

[jerry]$ awk 'length($0) > 18' marks.txt

在执行此代码时,您会得到以下结果 −

输出

3) Shyam   Biology   87
4) Kedar   English   85

AWK 提供了一个内置的 length 函数,它返回字符串的长度。 $0 变量存储整行,在没有正文块的情况下,将采取默认操作,即打印操作。 因此,如果一行的字符数超过 18 个,则比较结果为真并打印该行。