主页 > 创业  > 

linux系统shell流文本处理工具——awk

linux系统shell流文本处理工具——awk

awk awk数据处理awk工作原理awk语法特殊变量awk使用forawk使用if转义序列运算算数运算逻辑运算正则运算关系运算 awk脚本示例

awk数据处理

awk:流文本处理工具

awk是一种编程语言,用于对文本和数据的处理,数据可以来则标准输入、一个或多个文件,它支持用户自定义函数和动态正则表达式等功能,awk处理文本和数据的方式是: 逐行扫描文件,从第一行到最后一行 寻找匹配特定模式的行,并进行需要进行的操作 awk工作原理 awk使用每一行输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符结束,然后,行被(默认为空格或制表符)分解成字段(或称为域),每个字段存储在已编号的变量中,awk输出之后,将从文件中获取另一行,并将其存储在$0,覆盖原来的内容,然后将新的字符串分割成字段进行处理,该过程将持续到所有行处理完毕 awk语法 awk [options] 'commands' 文件名 options: -F 定义输入字段分隔符,默认分隔符是空格或制表符(tab) -f 指定一个规则文件 -v 赋值一个用户定义变量,将外部变量传递给awk -mf N 指定要处理的数据文件中的最大字段数 -mr N 指定数据文件中的最大数据行数 -W keyword 指定awk的兼容模式或警告等级 commands: BEGIN{}:begin发生在行处理之前 {}:行处理时,读一次执行一次 END{}:行处理之后 特殊变量

默认分隔符是空格或者tab键

NF: 表示字段数量, 当awk将行为记录时 //该变量相当于当前列号 FS(输入字段分隔符) //更改文件分割符,与参数-F作用相似 awk 'BEGIBN{FS=":"}{print $NF}' passwd passwd OFS(输出字段分隔符) //修改输出显示分隔符 awk 'BEGIN{FS=":";OFS=".."} {print $1,$2}' passwd NR(处理时候添加行号) //处理时添加上行号,多文件时候,累加添加行号 awk 'BEGIBN{FS=":"}{print NR,$0}' passwd FNR(处理时候添加行号) //处理时添加上行号,多文件时候,按文件分别添加行号 awk 'BEGIBN{FS=":"}{print FNR,$0}' passwd passwd RS(输入记录分隔符) //一行为一个记录,默认分隔符是换行符 awk -F: 'BEGIN{RS="\n"} {print $0}' passwd //默认输入记录分隔符是\n ORS(输出记录分隔符) //一行为一个记录,默认分隔符是换行符 awk -F: 'BEGIN{ORS=" "} {print $0}' passwd //输出分隔符修改为" " NF(字段个数) //NF是表示总列数,常用$NF来取最后一列 awk -F ":" '{print $NF}' passwd awk使用for 每行打印两次 awk -F: '{for(i=1;i<=2;i++) {print $0}}' passwd 分别打印每行每列 awk -F: '{for(i=1;i<=NF;i++) {print $i}}' passwd awk使用if awk 'BEGIN{开始输出}{if(条件){print $0}else{}}END{结尾输出}' 文件名 转义序列 \\ \自身 \$ 转义$ \t 制表符 \b 退格符 \r 回车符 \n 换行符 \c 取消换行 运算 算数运算 + 加 - 减 * 乘 / 除 & 求余 逻辑运算 || 逻辑或 && 逻辑与 正则运算 ~ 匹配正则表达式 !~ 不匹配正则表达式 关系运算 < 小于 <= 小于等于 > 大于 >= 大于等于 != 不等于 == 等于 awk脚本示例 统计文件内的性别人数 命令行awk -f 文件名.awk 文件输入: BEGIN{ man=0 woman=0 } {if($3 == "女"){ woman++ }else{ man++ } } END{ print "男生有:"man; print "女生有:"woman } 命令行输入 awk 'BEGIN{man=0;woman=0}{if($3 == "女"){woman++}else{man++}}END{print "男生有:"man;print "女生有:"woman }' 统计/etc/passwd文件中的登录shell awk -f awk.awk passwd awk.awk文件内容: BEGIN{ FS=":" } {bash[$NF]++} END{ for(i in bash){ print i,bash[i] } } 命令行输入 awk -F":" '{bash[$NF]++}END{for(i in bash){print i,bash[i]}}' passwd
标签:

linux系统shell流文本处理工具——awk由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“linux系统shell流文本处理工具——awk