awk:是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言的最大功能取决于一个人所拥有的知识。awk命名:Alfred Aho Peter Weinberger和brian kernighan三个人的姓的缩写。
最简单地说, AWK 是一种用于处理文本的编程语言工具。
任何awk语句都是由模式和动作组成,一个awk脚本可以有多个语句。模式决定动作语句的触发条件和触发时间。
awk编程基础及进阶
学习内容:
字段(域)与记录、模式匹配、基本的awk执行过程、awk常用内置变量(预定义变量)、awk数组(工作常用)
awk 选项:-F 指定域分隔符
awk格式:
1、查看awk版本:awk -version
工作中,常用gawk
2、awk指令:是由模式、动作,或者模式和动作的总和组成
格式:awk [options] 'pattern {action}'
pattern模式:可以理解为:找谁
action动作:可以理解为:干什么
3、awk执行过程
awk是一行一行的处理文件,这条命令中包含模式部分(条件)和动作部分,awk将处理模式指定的行
awk执行:
1、awk读取第一行
2、判断是否符合模式中的条件
如果匹配则执行对应的动作
如果不匹配,继续读取下一行
3、继续读取下一行
4、重复过程1-3,直至文件结束
4、awk内须知内置变量
记录:行 域:列
$ 取,取用内部信息
$0 代表当前的一整行,一条记录
$NF:代表最后一个区域的值
$1--$n $数字:代表第n个域
FS:一行记录的各域间的分隔符
NS:每行记录切割符,域间的分隔符
NR:代表行数(记录号),默认一行对应一个记录,读取新行时会自动加1
NF:最后一个域号,标识当前行有几个域
RS:记录的分隔符,简单理解为可以指定每个记录的结尾标识
5、正则表达式
^ | 匹配以什么开头的行 记录 | 如:‘^bash’ |
$ | 匹配以什么结尾的记录 | 如:‘bash$’ |
+ | 重复一次或一次以上 | |
~(匹配) / !~(不匹配) | 用于对记录或字段的表达式进行匹配 | 如:$1~ 第一个域匹配 |
* | 重复前一个字符0次或多次 | a*cool 匹配0或多个a |
[] | 匹配[]内任何一个字符 | [abc]、[a-z] |
. | 匹配任意一个字符(包括回车) | a. |
? | 匹配前面的字符0次或一次 | 如:a?b 匹配ab或b |
如:awk ‘$NF~/^bash’ /etc/passwd 最后一个域匹配以bash开头的行
a、/正则表达式开始/,/正则表达式结束/
如:awk '/root/,/mysql/' file2 显示file2文件中root第一次出现到MySQL第一次出现的行
b、$1~/正则表达式开始/,$3~/正则结束/
\{m,\}:匹配前面字符至少m次
\{m\}:匹配正好m次
\{m,n\}:匹配最少m次,最多n次
6、begin模块:在读取文件前就做的操作,一般用于初始化条件的设置
end模块:读取完所有的文件时才做的最后工作
{}:内部写读取文件时进行的操作,用来遍历整个文件,类似于awk的迭代器
awk格式:awk 'BEGIN{初始化}{文件操作}END{结束操作}'
awk 'BEGIN{coms} /pattern/{coms} END{coms}' filename
awk使用;分隔多个命令
7、awk案列
(1)file2中,以:为分隔符,区域3大于15的行的数目?
awk -F ":" '$3>15{a=a+1}END{print a}' file2
注:a=a+1 === a++ === a+=1
(2)用awk输出1+2+.....+100的值
awk 'BEGIN{for(i=1;i<=100;i++) sum+=i; print sum}'
8、awk数组:数组名[处理字串]=“值” (arrayname[string]=value)
awk数组下标:可以是数字、字母、字符串
输出数组:for(key(变量) in array) key是元素名
print key,array[key]
(1)awk统计每个IP的访问量
array[192,168.224.10]++