awk用法小结--有关awk的材料
### awk用法小结 #### 一、awk简介与特点 **awk** 是一款非常强大的文本处理工具,尤其适用于处理结构化的文本文件,比如那些按照行和列组织的数据。相较于 **sed**,**awk** 提供了更为丰富的编程功能,能够进行复杂的文本处理并生成复杂的报表输出。 #### 二、awk的不同版本及其选择 - **旧 awk**:早期版本,存在较多的功能限制。 - **nawk**:新的 awk 版本,提供了更多的功能支持。 - **gawk**:GNU awk 的简称,广泛应用于 Linux 系统中,具有很强的功能性和灵活性。 对于 Solaris 操作系统而言,推荐使用 **nawk**,因为它相比旧版的 awk 增加了许多重要的功能,如支持数学运算中的幂运算 `^`、函数 `getline` 和 `system` 等。 #### 三、awk的基本语法及内部变量 **awk** 的基本语法格式如下: ```sh awk 'pattern {action}' filename ``` - **pattern**:模式,用于指定处理哪些行。 - **action**:当模式匹配成功时执行的动作。 - **filename**:待处理的文件名。 **执行顺序**:**awk** 逐行读取输入文件,并根据模式匹配执行相应的动作。 除了基本语法外,**awk** 还支持使用内部变量、函数、条件与循环语句以及数学和字符串操作等功能。此外,还可以通过 **BEGIN** 和 **END** 来指定处理文件前后执行的操作。 **常用内部变量** 包括但不限于: - **NR**:当前行号。 - **NF**:当前行的字段数。 - **$0**:当前行的内容。 - **$1**:第一字段。 - **FS**:字段分隔符,默认为空白字符。 - **OFS**:输出字段分隔符,默认为空格。 - **ORS**:输出行分隔符,默认为换行符。 #### 四、模式与条件语句 - **模式** 可以是 `/pattern/` 形式,也可以是条件语句,如 `$3 < 10`。 - **BEGIN** 语句在处理文件之前执行,常用来设置 **FS** 或 **OFS**。 - **END** 语句在处理文件之后执行。 - **条件与循环**:支持 `if-else`、`for`、`do-while` 等结构。 #### 五、数学运算与字符串操作 - **数学运算** 支持 `+`、`-`、`*`、`/`、`%`、`^` 等运算符。 - **数学函数** 如 `sin()`、`int()` 等。 - **字符串函数** 包括 `length()`、`index()`、`gsub()`、`substr()` 等。 #### 六、数组与关联数组 - **数组** 用于存储一系列值。 - **关联数组** 通过键值对的方式存储数据。 #### 七、输出重定向与管道 支持标准的输出重定向 `>` 和管道 `|`。此外,**awk** 内部还支持 `getline` 和 `system` 等命令。 #### 八、awk的不同调用方式 - **单行命令调用**:`awk 'pattern {action}' filename1 filename2` - **脚本文件调用**:`awk -f myscript.awk filename1 filename2` - **直接执行脚本**:在脚本文件中添加执行权限并指定解释器路径(如 `#!/bin/nawk -f`),然后执行 `myscript.awk filename` #### 九、特殊注意事项 - 从 Windows 复制到 Unix 系统的脚本可能会遇到行尾字符问题。 - 在编写脚本文件时,**BEGIN** 或 **END** 后必须紧跟 `{`。 - 所有的动作语句必须放在 `{}` 中。 - 单独的赋值或模式条件句如果没有 `{}` 默认会执行 `print $0`。 - `if` 条件语句必须放在动作 `{}` 中。 - 条件判断中“相等”应使用 `==` 而不是 `=`。 - 输出多列需使用逗号 `,` 分隔。 - `for` 循环中的间隔符应为分号 `;` 而非逗号 `,`。 #### 十、实例演练 以下是一些具体的使用示例,用于帮助理解 **awk** 的各种用法。 **基础实例** 1. **无pattern的action实例** - `awk '{print NR, $1, $NF}' data.txt`:打印行号、第一列和最后一列,中间无分隔符。 - `awk '{print $1, $NF}' data.txt`:打印第一列和最后一列,并使用默认的分隔符分隔。 - `awk '{print $0, $NF + 10}' data.txt`:打印整行,并打印最后一列加上10的结果。 2. **有pattern的action实例** - `awk '/[0-9]/' data.txt`:打印包含数字的行。 这些示例涵盖了 **awk** 的基本用法和技术要点,有助于更好地理解和掌握这一强大的文本处理工具。通过实践这些例子,可以进一步探索 **awk** 的强大功能和灵活性。
剩余6页未读,继续阅读
- sky5189102013-11-13很好很实用,受教了。
- 粉丝: 3
- 资源: 25
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助