Awk 个人笔记.docx
`Awk` 是一个强大的文本分析工具,常用于处理结构化的数据文件,如CSV或TSV格式。在Unix和Linux环境中,它被广泛应用于数据处理和报告生成。下面将详细介绍`Awk`的一些核心概念和功能。 1. **awk 语法**: `Awk`程序由一系列规则组成,每条规则包含一个模式(Pattern)和可选的动作(Action)。基本语法是 `pattern { action }`。当输入行与模式匹配时,执行对应的动作。如果没有指定模式,则默认模式为`true`,意味着对每一行都会执行动作。 2. **动作加花括号**: 动作通常包含一系列命令,用花括号 `{}` 包裹,表示一个复合命令。如果动作只有一条命令,花括号可以省略。 3. **输出逗号分隔域**: `Awk`默认以空格或制表符作为字段分隔符。通过`print $1, $2, ...`可以输出指定的字段,逗号用于分隔字段。 4. **错误处理**: 在`Awk`中,错误处理通常是通过条件判断实现的,例如,检查某个变量是否为空或者值是否在预期范围内。 5. **正则表达式匹配**: `Awk`支持正则表达式,可以用来匹配和查找特定模式。例如,`=~`操作符用于测试字符串是否匹配正则表达式。 6. **if 语句**: `if`语句用于根据条件执行不同的动作。例如,`if (condition) { action }`,如果条件满足,执行动作。 7. **不匹配**: 使用`!~`操作符可以检查字符串是否不匹配正则表达式。 8. **小于等于**: `awk`支持比较运算符,如`<`, `<=`, `==`, `!=`等,可以用于比较数字或字符串。 9. **匹配中括号[]**: `[char-list]`表示匹配列表中的任意一个字符。例如,`/[abc]/`会匹配包含'a', 'b'或'c'的行。 10. **匹配任意单个字符**: 句点`.`在正则表达式中代表任意单个字符。 11. **Awk 内置变量**: - `NF`:当前记录的字段数量。 - `NR`:已处理的总行数。这两个变量在处理过程中可以被引用和修改。 - 分号`;`用于分隔`Awk`命令,使得一条语句可以执行多个操作。 12. **列汇总计算**: 可以使用`awk`进行列的统计计算,例如,计算第五列的总和。在例子中,`ls -l`列出文件信息,然后通过`awk`提取第九列(文件大小)和第五列(权限),累加第五列的数值,并在末尾输出总计。 13. **字符串函数**: - **替换**:`sub()`和`gsub()`函数用于替换字符串中的子串,如`gsub(/pattern/,"replacement",string)`。 - **长度**:`length(string)`返回字符串的长度。 - **分隔**:`split(string, array, separator)`函数将字符串按指定分隔符分割成数组。 - **截取**:可以使用数组下标来截取字符串的某个部分,例如,`array[1]`获取第一个字段。 通过这些基本概念和功能,`Awk`可以实现复杂的文本处理任务,包括数据分析、日志分析、格式转换等。它的灵活性和强大性使得它成为数据处理领域不可或缺的工具。