awk.cheat.sheet
需积分: 0 66 浏览量
更新于2009-08-30
收藏 63KB PDF 举报
### AWK 快速参考指南
#### 一、概述
AWK 是一款强大的文本处理工具,由 Alfred V. Aho、Peter J. Weinberger 和 Brian W. Kernighan 在 20 世纪 70 年代末共同开发。AWK 语言的主要功能在于能够方便地对数据进行提取、分析和报告生成。它特别适用于处理结构化的文本数据,例如日志文件、CSV 文件等。AWK 支持多种变量类型,并且具有丰富的内置函数集合,能够满足大多数文本处理需求。
#### 二、预定义变量概览
在 AWK 中,预定义变量是系统自动设置的一些变量,用于控制或获取程序运行时的信息。下面将详细介绍 AWK 中常见的预定义变量及其作用:
1. **FS (Field Separator)**:输入字段分隔符,默认为空格。这个变量决定了 AWK 如何将一行文本分割成多个字段。
- 支持情况:AWK、NAWK、GAWK
2. **OFS (Output Field Separator)**:输出字段分隔符,默认为空格。这个变量决定了 AWK 在输出时如何连接不同的字段。
- 支持情况:AWK、NAWK、GAWK
3. **NF (Number of Fields)**:当前输入记录中的字段数量。该变量反映了当前行被分割后的字段总数。
- 支持情况:AWK、NAWK、GAWK
4. **NR (Number of Records)**:已读取的总记录数。该变量记录了自程序开始执行以来读取的所有行数。
- 支持情况:AWK、NAWK、GAWK
5. **RS (Record Separator)**:记录分隔符,默认为换行符。该变量定义了 AWK 将哪些字符视为记录的边界。
- 支持情况:AWK、NAWK、GAWK
6. **ORS (Output Record Separator)**:输出记录分隔符,默认为换行符。该变量定义了 AWK 在输出记录时使用的分隔符。
- 支持情况:AWK、NAWK、GAWK
7. **FILENAME**:当前输入文件的名称。如果没有指定文件,则该值为 "-"。需要注意的是,在 BEGIN 块中 FILENAME 是未定义的(除非通过 getline 设置)。
- 支持情况:AWK、NAWK、GAWK
8. **ARGC**:命令行参数的数量(不包括 gawk 选项或程序源)。通过动态改变 ARGV 的内容可以控制所使用的数据文件。
- 支持情况:仅 GAWK 支持
9. **ARGV**:一个包含命令行参数的数组。数组从 0 到 ARGC-1 进行索引。
- 支持情况:仅 GAWK 支持
10. **ARGIND**:当前正在处理的文件在 ARGV 数组中的索引。
- 支持情况:仅 GAWK 支持
11. **BINMODE**:在非 POSIX 系统上,用于指定所有文件 I/O 的“二进制”模式。数值 1、2 或 3 分别表示输入文件、输出文件或所有文件应使用二进制 I/O;字符串 "r" 或 "w" 分别表示输入文件或输出文件应使用二进制 I/O;字符串 "rw" 或 "wr" 表示所有文件应使用二进制 I/O;其他任何字符串值都将被视为 "rw",但会生成警告消息。
- 支持情况:仅 GAWK 支持
12. **CONVFMT**:用于指定数字转换为字符串时的格式,默认为 "%.6g"。
- 支持情况:仅 GAWK 支持
13. **ENVIRON**:一个包含当前环境变量值的数组。
- 支持情况:仅 GAWK 支持
14. **ERRNO**:如果发生系统错误(如重定向 getline、读取 getline 或 close() 期间),则 ERRNO 将包含描述错误的字符串。
- 支持情况:仅 GAWK 支持
15. **FIELDWIDTHS**:字段宽度的空格分隔列表。设置后,gawk 将按照固定宽度解析输入,而不是使用 FS 变量作为字段分隔符。
- 支持情况:仅 GAWK 支持
16. **FNR (File Number of Records)**:包含了读取的行数,但对于每个读取的文件都会重置。
- 支持情况:NAWK、GAWK
17. **IGNORECASE**:控制所有正则表达式和字符串操作的大小写敏感性。如果 IGNORECASE 的值非零,则字符串比较和模式匹配将忽略大小写。
- 支持情况:AWK、NAWK、GAWK
以上这些预定义变量为 AWK 用户提供了极大的灵活性和便利性,使得用户能够在处理数据时更加精确地控制流程和结果。在实际使用过程中,了解并熟练掌握这些变量的用法是非常重要的。
### 三、应用实例
为了更好地理解这些预定义变量的应用场景,我们可以通过一些简单的示例来演示它们的实际使用方法。
#### 示例 1:统计文件中每行的字段数量
假设有一个文件 `data.txt`,其内容如下:
```
John Doe 25
Jane Smith 30
```
我们可以使用以下命令来统计每行的字段数量:
```bash
awk '{print NF}' data.txt
```
输出结果将是:
```
3
3
```
这里使用了预定义变量 `NF` 来表示每行的字段数量。
#### 示例 2:使用自定义分隔符输出记录
假设 `data.csv` 文件内容如下:
```
name,age,email
John Doe,25,john@example.com
Jane Smith,30,jane@example.com
```
我们可以使用以下命令来使用逗号作为分隔符并输出所有记录:
```bash
awk -F',' '{print $1,$2,$3}' data.csv
```
输出结果将是:
```
name age email
John Doe 25 john@example.com
Jane Smith 30 jane@example.com
```
这里使用了 `-F` 选项来设置 `FS` 变量,并通过 `$1`, `$2`, `$3` 引用各个字段。
#### 四、总结
AWK 作为一种强大的文本处理工具,其预定义变量在实际应用中扮演着非常重要的角色。通过对这些变量的理解和掌握,用户可以更灵活地处理各种复杂的文本数据,并实现自动化脚本编写,从而大大提高工作效率。希望本文的介绍能帮助大家更好地理解和运用 AWK 预定义变量。
winneryong
- 粉丝: 0
- 资源: 3