AWK 是一个强大的文本分析工具,相对于 grep 的查找,sed 的编辑,awk 在其对数据分析并生成报告时,显得尤为强大。简单来说 awk 就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
简介
AWK 其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
使用方法
基本用法
1awk [-F FS] 'pattern{action}' filename
参数说明
- pattern 表示 awk 在数据中查找的内容
- action 在找到匹配内容时所执行的一系列命令
-F FS指定域分割符为FS(一行代表一个记录,一个记录按 FS 分割成多个域)
核心 action
- 内置变量
ARGC命令行数量个数ARGV命令行变元数组FILENAME当前输入文件名NR当前文件中的记录号(行号)FS设置域分隔符,等价于 -FRS设置记录分隔符,默认是 ‘\n’NF浏览记录中域的个数NR已读的记录数OFS输出域分隔符ORS输出记录分隔符$0整条记录$1/2第 1/2 个域
- 变量和赋值
- 变量值可以是数字或字符串,关键是怎么用.
- 条件语句和循环语句完全借鉴c语言
- 内置函数
- 数字
atan2/cos/exp/int/log/rand/sin/sqrt/srand - 字符串
index/length/match/toupper/tolower/substr/system/systime
- 数字
- 内置函数
样例演示
统计 /etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容
1awk -F ':' '{printf("filename:%11s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd统计 /etc/passwd 中出现 oo 次数
1awk -F ':' 'BEGIN{count=0;printf("login_name\tpasswd\n")} /oo/{printf("%-15s\t%s\n",$1,$2);count++} END{printf("count is %d\n",count)}' /etc/passwd注意: BEGIN{} 表示在处理任意行之前进行的操作. END{} 表示在处理完所有行之后进行的操作.
统计 /etc/passwd 中第 1 列以 s 开头的行
1awk -F ':' '$1~/^s/{printf("%s\n",$1)}' /etc/passwd统计 /etc/passwd 中第 1 列为 sys 的行
1awk -F ':' '$1=="sys"{printf("%s\n",$1)}' /etc/passwd注意: ~和==都是匹配,不过~是不精确的比较,一般跟正则连用




