AWK 是一个强大的文本分析工具,相对于 grep 的查找,sed 的编辑,awk 在其对数据分析并生成报告时,显得尤为强大。简单来说 awk 就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
简介
AWK 其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
使用方法
基本用法
awk [-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:文件名,每行的行号,每行的列数,对应的完整行内容
awk -F ':' '{printf("filename:%11s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd
-
统计 /etc/passwd 中出现 oo 次数
awk -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 开头的行
awk -F ':' '$1~/^s/{printf("%s\n",$1)}' /etc/passwd
-
统计 /etc/passwd 中第 1 列为 sys 的行
awk -F ':' '$1=="sys"{printf("%s\n",$1)}' /etc/passwd
注意:
和==都是匹配,不过是不精确的比较,一般跟正则连用
参考文献
如果该文章对您产生了帮助,或者您对技术文章感兴趣,可以关注微信公众号: 技术茶话会, 能够第一时间收到相关的技术文章,谢谢!
本篇文章由一文多发平台ArtiPub自动发布