Linux三剑客之一 awk

awk:是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一 。这种编程及数据操作语言的最大功能取决于一个人所拥有的知识 。awk命名: Aho Peter 和brian 三个人的姓的缩写 。
最简单地说,AWK 是一种用于处理文本的编程语言工具 。
任何awk语句都是由模式和动作组成,一个awk脚本可以有多个语句 。模式决定动作语句的触发条件和触发时间 。
awk编程基础及进阶
学习内容:
字段(域)与记录、模式匹配、基本的awk执行过程、awk常用内置变量(预定义变量)、awk数组(工作常用)
awk 选项:-F 指定域分隔符
awk格式:
1、查看awk版本:awk -
工作中,常用gawk
2、awk指令:是由模式、动作,或者模式和动作的总和组成
格式:awk [] ' {}'
模式:可以理解为:找谁
动作:可以理解为:干什么
3、awk执行过程
awk是一行一行的处理文件,这条命令中包含模式部分(条件)和动作部分,awk将处理模式指定的行
【Linux三剑客之一 awk】awk执行:1、awk读取第一行2、判断是否符合模式中的条件如果匹配则执行对应的动作如果不匹配,继续读取下一行3、继续读取下一行4、重复过程1-3,直至文件结束
4、awk内须知内置变量
记录:行 域:列$ 取,取用内部信息$0 代表当前的一整行,一条记录$NF:代表最后一个区域的值$1--$n $数字:代表第n个域FS:一行记录的各域间的分隔符NS:每行记录切割符,域间的分隔符NR:代表行数(记录号),默认一行对应一个记录,读取新行时会自动加1NF:最后一个域号,标识当前行有几个域RS:记录的分隔符,简单理解为可以指定每个记录的结尾标识
5、正则表达式
^
匹配以什么开头的行 记录
如:‘^bash’
$
匹配以什么结尾的记录
如:‘bash$’
+
重复一次或一次以上
~(匹配) / !~(不匹配)
用于对记录或字段的表达式进行匹配
如:$1~ 第一个域匹配
*
重复前一个字符0次或多次
a*cool 匹配0或多个a
[]
匹配[]内任何一个字符
[abc]、[a-z]

Linux三剑客之一 awk

文章插图
.
匹配任意一个字符(包括回车)
a.

匹配前面的字符0次或一次
如:a?b 匹配ab或b
如:awk ‘$NF~/^bash’ /etc/ 最后一个域匹配以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} //{coms} END{coms}'
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数组:数组名[处理字串]=“值” ([]=value)