UNIX系统下的AWK命令详解

需积分: 7 0 下载量 121 浏览量 更新于2024-09-29 收藏 6KB TXT 举报
"AWK在UNIX环境中的应用解析" 在UNIX操作系统中,AWK是一种强大的文本分析工具,常用于处理和解析文件数据。本教程主要基于sco 5.0.5版本的UNIX系统,讲解了AWK的基本用法。 1. 命令格式与变量: `awk 'pattern {action}' file` - `pattern`:匹配模式,可以是正则表达式或特定条件。 - `{action}`:执行的动作,如打印、计算等。 - `ARGC`:命令行参数的数量(包括脚本本身)。 - `ARGV`:包含所有命令行参数的数组。 - `FILENAME`:当前处理的文件名。 - `FNR`:当前文件中的行号。 - `FS`:字段分隔符,默认为空格或制表符。 - `RS`:记录分隔符,默认为换行符。 - `NF`:当前行的字段数量。 - `NR`:已读取的总行数。 - `OFS`:输出字段分隔符,默认为空格。 - `ORS`:输出记录分隔符,默认为换行符。 2. 常见的AWK用法: - `awk '/101/' 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之间(含5和15),则打印该行。 3. 输出格式控制: - `awk '{print NR, NF, $1, $NF}' file`:打印行号、字段数、第一列和最后一列。 - `awk '/101/{print $1, $2+10}' file`:对于匹配101的行,打印第一列并加上10。 - `awk '/101/{print $1$2}' file`:将匹配101的行的第一列和第二列合并成一个字符串。 - `awk '/101/{print $1$2}' file`:没有指定操作符时,默认是打印整行,但这里的空格表示合并字段。 4. 字段分隔符的设定: - `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`:直接在命令行中指定多个分隔符。 5. 与其他命令结合: - `df | awk '$4>1000000'`:通过管道连接df命令,筛选第四列值大于1000000的结果。 - `awk -f awkfile file`:使用名为awkfile的外部AWK脚本来处理file文件。 - `catawkfile`:将awkfile文件的内容作为输入,处理标准输入。 6. 正则表达式匹配: - `awk '$1~/101/' file`:匹配第一列中含有101的行。 7. 输出字段分隔符的改变: - `awk 'BEGIN{OFS="%"} {print $1,$2}' file`:设置输出字段分隔符为百分号。 8. 全局变量与逻辑表达式: - `BEGIN{max=100;print"max="max}`:在处理文件前设置全局变量max,并打印初始值。 - `max=($1>max?$1:max)`:更新max为当前行第一列的值(如果更大)。 - `if(条件) 行动1; else 行动2`:逻辑判断,符合条件执行行动1,否则执行行动2。 9. 条件表达式: - `awk '{print($1>4?"high"$1:"low"$1)}' file`:根据第一列的值打印"high"或"low",并与数值一起输出。 AWK的强大之处在于其灵活性和对文本处理的精确控制,使得它成为处理大量结构化文本数据的理想工具。通过熟练掌握这些基本用法,可以高效地完成数据提取、分析和报告生成等工作。