📅  最后修改于: 2020-11-05 03:49:24             🧑  作者: Mango
本章介绍了几个有用的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个以上字符。
[jerry]$ awk 'length($0) > 18' marks.txt
在执行此代码时,您将获得以下结果-
3) Shyam Biology 87
4) Kedar English 85
AWK提供了一个内置的length函数,该函数返回字符串的长度。 $ 0变量存储整行,并且在没有body块的情况下,将采取默认操作,即打印操作。因此,如果一行的字符数超过18个,则比较结果为true,并且该行被打印。