awk 命令详解:模式匹配与变量运用

需积分: 15 1 下载量 187 浏览量 更新于2024-09-11 收藏 7KB TXT 举报
"这篇资源主要介绍了awk命令在处理文本数据时的各种用法,包括匹配特定行、处理字段、条件判断以及自定义分隔符等。此外,还提到了awk内部预定义变量的作用,如ARGC、ARGV、FILENAME、FNR、FS、RS、NF、NR、OFS和ORS。" 在Linux或Unix环境中,awk是一种强大的文本分析工具,常用于处理和解析结构化数据。以下是关于awk用法和变量含义的详细解释: 1. **匹配行**: - `awk '/101/' file`:查找并打印文件`file`中包含字符串"101"的行。 - `awk '/101/,/105/' file`:从包含"101"的行开始,到包含"105"的行结束,打印所有行。 - `awk '$1 == 5' file`:如果第一字段(默认以空格分隔)是数字5,则打印该行。 - `awk '$1 == "CT"' file`:若第一字段为字符串"CT",则打印该行。注意字符串需用双引号括起来。 - `awk '$1 * $2 > 100' file`:如果第一字段乘以第二字段的结果大于100,打印该行。 - `awk '$2 > 5 && $2 <= 15' file`:当第二字段的值大于5且小于等于15时,打印该行。 2. **处理字段**: - `awk '{print NR, NF, $1, $NF}' file`:显示文件的当前记录号(NR)、域数(NF)以及每行的第一个($1)和最后一个($NF)域。 - `awk '/101/{print $1, $2+10}' file`:在匹配"101"的行中,打印第一字段,并将第二字段加10。 - `awk '/101/{print $1$2}' file`:将匹配行的第一和第二字段合并,不带分隔符。 3. **处理输入和输出分隔符**: - `df | awk '$4 > 1000000'`:通过管道符传递`df`命令的输出,显示第四字段大于1000000的行。 - `awk -F "|" '{print $1}' file`:设置分隔符为"|",打印每个以"|"分隔的字段的第一部分。 - `awk 'BEGIN{FS="[:\t|]"} {print $1,$2,$3}' file`:设置输入分隔符为冒号、制表符或竖线,打印前三个字段。 - `awk -F $Sep '{print $1}' file`:根据环境变量`Sep`的值作为分隔符。 - `awk -F '[:,\t|]' '{print $1}' file`:使用正则表达式定义分隔符,包括空格、冒号、制表符和竖线。 - `awk -F '[][]' '{print $1}' file`:以方括号"[ ]"作为分隔符。 4. **自定义脚本**: - `awk -f awkfile file`:通过指定的awk脚本文件`awkfile`来处理`file`。 - 例如,`awkfile`可以包含: ``` /101/{print "\047Hello!\047"} # 匹配到"101"时打印'Hello!' {print $1, $2} # 没有模式时,打印每一行的前两个字段 ``` 5. **其他内部变量**: - `ARGC`:命令行参数的数量,包括脚本文件名。 - `ARGV`:命令行参数的数组,包括文件名。 - `FILENAME`:当前正在处理的文件名。 - `FNR`:当前文件中的记录数,不同于全局的`NR`,只针对单个文件。 - `FS`:输入字段分隔符,可自定义。 - `RS`:输入记录分隔符,可自定义。 - `NF`:当前记录中的字段数量。 - `NR`:到目前为止处理的总记录数。 - `OFS`:输出字段分隔符,用于控制输出时字段间的间隔。 - `ORS`:输出记录分隔符,控制行之间的间隔。 通过灵活运用这些功能,awk可以高效地对文本数据进行筛选、处理和格式化,是Linux系统管理及数据分析中的得力助手。