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 '{print3 "\t" $4}' marks.txt
执行此代码,您将获得以下结果−
输出
Physics 80
Maths 90
Biology 87
English 85
History 89
在文件 marks.txt 中,第三列包含科目名称,第四列包含特定科目的分数。让我们使用AWK打印命令来打印这两列。在上面的示例中, $3和$4 分别代表输入记录中的第三个和第四个字段。
打印所有行
默认情况下,AWK打印所有与模式匹配的行。
示例
[jerry]awk '/a/ {print0}' marks.txt
执行该代码后,你将得到以下结果:
输出
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
在上面的示例中,我们正在搜索表单模式 一个 .当模式匹配成功时,它会执行来自body块的命令。在没有body块的情况下,采取的默认操作是打印记录。因此,以下命令产生相同的结果−
示例
[jerry]$ awk '/a/' marks.txt
按模式打印列
当模式匹配成功时,默认情况下,AWK会打印整条记录。但是你可以指定AWK只打印特定的字段。例如,以下示例在模式匹配成功时打印第三个和第四个字段。
示例
[jerry]awk '/a/ {print3 "\t" $4}' marks.txt
执行该代码后,您会得到以下结果-
输出
Maths 90
Biology 87
English 85
History 89
以任意顺序打印列
可以以任意顺序打印列。例如,下面的示例先打印第四列,然后打印第三列。
示例
[jerry]awk '/a/ {print4 "\t" $3}' marks.txt
在执行上面的代码时,你将得到以下结果−
输出
90 Maths
87 Biology
85 English
89 History
计数和打印匹配模式
让我们看一个示例,你可以计数并打印匹配模式成功的行数。
示例
[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt
执行此代码后,您会得到以下结果−
输出
Count = 4
在这个示例中,当匹配成功时,我们增加计数器的值,并在END块中打印这个值。请注意,与其他编程语言不同,使用变量之前无需声明。
打印长度超过18个字符的行
让我们仅打印那些包含超过18个字符的行。
示例
[jerry]awk 'length(0) > 18' marks.txt
在执行这段代码时,你会得到以下结果:
输出
3) Shyam Biology 87
4) Kedar English 85
AWK提供了一个内置的 length 函数,该函数返回字符串的长度。 $0
变量存储整个行,在没有定义动作块的情况下,会执行默认动作,即打印动作。因此,如果一行的字符数超过18个,那么比较结果为true,该行将被打印出来。