AWK
awk是一个强大的文本分析工具。 相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。 简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。
-Fawk ‘{pattern + action}’ {filenames}
–支持自定义分隔符
–支持正则表达式匹配
–支持自定义变量,数组 a[1] a[tom] map(key)
–支持内置变量
•ARGC 命令行参数个数
•ARGV 命令行参数排列
•ENVIRON 支持队列中系统环境变量的使用
•FILENAME awk浏览的文件名
•FNR 浏览文件的记录数
•FS 设置输入域分隔符,等价于命令行 -F选项
•NF 浏览记录的域的个数
•NR 已读的记录数
•OFS 输出域分隔符
•ORS 输出记录分隔符
•RS 控制记录分隔符
–支持函数
•print、split、substr、sub、gsub
–支持流程控制语句,类C语言
if、while、do/while、for、break、continu
案例
awk -F’:’ ‘{print $1}’ passwd
cut -d’:’ -f1 passwd
awk -F’:’ ‘BEGIN{print “name\tlogin”} {print $1 “\t” $7} END{print “this is end”}’ passwd
awk ‘/root/{print $0}’ passwd
awk -F’:’ ‘{ print NR “\t” NF “\t” $0}’ passwd
zhangsan 2000-01-11 html 90
lisi 2000-02-11 java 70
zhangsan 2000-01-22 java 80
lisi 2000-01-11 math 60
xiaoming 2000-01-11 html 80
xiaoming 2000-01-11 math 40
awk ‘{score[$3]+=$4} END{for(i in score) print i “\t” score[i]}’ score.txt
awk ‘{score[$3]+=$4} END{for(i in score) print i “\t” score[i]}’ score.txt
awk ‘{split($2,date,"-");if(date[2]==‘01’){ score[$3]+=$4}} END{for(i in score) print i “\t” score[i]}’ score.txt