- AWK 教程
- AWK - 首页
- AWK - 概述
- AWK - 环境
- AWK - 工作流程
- AWK - 基本语法
- AWK - 基本示例
- AWK - 内置变量
- AWK - 运算符
- AWK - 正则表达式
- AWK - 数组
- AWK - 控制流
- AWK - 循环
- AWK - 内置函数
- AWK - 用户自定义函数
- AWK - 输出重定向
- AWK - 美化输出
- AWK 有用资源
- AWK - 快速指南
- AWK - 有用资源
- AWK - 讨论
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 print 命令打印这两列。在上面的示例中,$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
在这个例子中,当模式匹配成功时,我们递增计数器的值,并在 END 块中打印此值。请注意,与其他编程语言不同,无需在使用变量之前声明它。
打印超过 18 个字符的行
让我们只打印包含超过 18 个字符的行。
示例
[jerry]$ awk 'length($0) > 18' marks.txt
执行此代码后,您将得到以下结果:
输出
3) Shyam Biology 87 4) Kedar English 85
AWK 提供一个内置的 length 函数,该函数返回字符串的长度。$0 变量存储整行,在没有主体块的情况下,将采取默认操作,即打印操作。因此,如果一行超过 18 个字符,则比较结果为真,并且该行将被打印。
广告