掌握awk命令:强大的文本处理工具

需积分: 10 2 下载量 175 浏览量 更新于2024-09-09 收藏 6KB TXT 举报
awk命令是一种强大的文本处理工具,特别是在Unix和类Unix系统中广泛用于数据提取、格式转换和简单脚本编写。它的名称源于"awk", Advanced Unix Text Processing Language,由Aho, Weinberger和 Kernighan在1977年开发。awk的主要工作原理是通过模式匹配(pattern)来选择并执行相应的动作(action),针对输入文件中的每一行进行操作。 1. **语法结构**: awk的基本语法格式是 `awk 'pattern {action}' file`。这里,pattern 是一个正则表达式,用来定义行应被处理的条件;action 则是当匹配到pattern时执行的命令。例如,`awk '/101/' file` 会打印包含 "101" 的行。 2. **变量和环境**: - `ARGC`: 当前awk命令的参数个数。 - `ARGV`: 包含所有命令行参数的数组。 - `FILENAME`: 当前正在处理的文件名。 - `FNR`: 当前正在处理的文件中的行号。 - `FS`: 字符分隔符,默认为空格,用于解析字段。 - `RS`: 行分隔符,默认换行符,用于分割多行记录。 - `NF`: 当前行的字段数量。 - `NR`: 已处理的总行数。 - `OFS` 和 `ORS`: 输出分隔符和行结束符,可自定义。 3. **基本用法举例**: - `awk '$1==5' file`:匹配第1列等于5的行。 - `awk '$1=="CT"' file`:匹配第1列包含 "CT" 的行。 - `awk '$1*$2>100' file`:检查第1列与第2列相乘是否大于100。 - `awk '{print NR, NF, $1, $NF}' file`:显示每行的行号、字段数以及第1列和最后一列。 4. **流程控制和格式化**: - `awk '/101/{print $1, $2+10}' file`:在满足pattern时,对第2列加10并打印。 - `awk '/101/{print $1$2}' file`:合并第1列和第2列。 - `awk -F"|'" '{print $1}' file`:根据 "|" 分割并打印第1列。 5. **多行模式**: - `/101/{print "\047Hello!\047"}`:在找到 "101" 后输出字符串 "Hello!"。 - `{print $1, $2}`:如果没有特殊条件,打印第1列和第2列。 6. **格式设置**: - `BEGIN{OFS="%"}`:在程序开始时设置输出分隔符为 "%". - `BEGIN{max=100; print "max=" max}`:初始化变量并打印初始最大值。 7. **逻辑判断和函数**: - `if(ʽ1) ʽ2 else ʽ3`:条件语句,根据条件执行不同的代码块。 - `awk '{print($1>4 ? "high"$1 : "low"$1)}' file`:基于条件选择输出的字段值。 awk是一个功能强大的文本处理工具,它允许用户灵活地筛选、操作和格式化数据。无论是简单的数据提取还是复杂的条件处理,awk都能胜任。通过熟练掌握其语法和变量,可以极大地提高数据处理的效率和准确性。