awk命令详解
awk是一个优良的文本处理工具,Linux及UNIX环境中现有的功能最强大的数据处理引擎之一,awk是一个行级文本高效处理工具,awk经过改进生成的新的版本有nawk、gawk,一般Linux默认为gawk,gawk是awk的GNU开源免费版本。
awk基本原理是逐行处理文件中的数据,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤,如果找不到匹配内容,则继续处理下一行。
awk语法格式为:
awk 'pattern +{action} ’ file
awk常用参数、变量、函数
(1)awk基本语法参数
1.单引号’'是为了和shell命令区分开
2.大括号{}表示一个命令分组
3.pattern是一个过滤器,表示匹配pattern条件的行才进行action处理
4.action是处理动作,常见动作为print
5.使用#作为注释,pattern和action可以只有其一,但不能两者都没有
常用命令选项
-F fs fs指定输入分隔符,fs可以是字符串或正则表达式
-v var=value 赋值一个用户定义变量,将外部变量传递给awk
-f scripfile 从脚本文件中读取awk命令
(2)awk内置变量
1.FS:分隔符,默认是空格
2 NR:当前行数
3 NF:当前记录字段个数
4.OFS:输出分隔符
5. 0:当前记录
6.$1~$n:当前记录第n个字段
(3)awk内置函数
1.split(s,a,fs):在fs上将s分成序列a
2.length(l):l的长度
3.index(m,n):返回m中n的第一个位置
4.substr(m,n):返回m从n开始的子串
5.gsub(r,s):在$0中用s代替r
6.match(s,r):s是否匹配r
(4)awk常用操作符、运算符及判断符
1.++,--:增加与减少
2.^∗∗:指数
3.!+-:非、一元(unary)加号、一元减号
4.+-∗/%:加、减、乘、除、求余
5.&&:逻辑and
6.‖:逻辑or
(5)awk流程控制语句
1.if (condition){ }
else { };
2.while{};
3. do {}
while(condition);
4.for(init;condition;step){};
BEGIN和END的使用
在许多编程情况中, 可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。因此awk 允许定义一个 BEGIN 块,因为 awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。除此之外还有一个END模块,通常END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。
BEGIN{ }: 读入第一行文本之前执行的语句
END{ }: 处理完最后一行文本后执行
{ }: 逐行处理
例如:我们在2.txt文件中使用BEGIN和END模块添加内容
可以看到在文本开头和结尾打印了输入的内容。
awk命令使用
实例一:打印硬盘设备的名称,以空格分隔输出实例二:awk以空格、冒号、\t、分号为分割
实例三:awk以冒号分割2.txt,打印第二列,同时将内容追加到3.txt文件下
实例四:打印/etc/passwd文件中的第5行至第10行
实例五:打印1.txt文件中长度大于10的行号,NR表示行号
实例六:以;切割,打印第二列同时只显示前3行
实例七:打印/etc/passwd中的奇数行
实例八:OFS输出格式化\t /etc/passwd实例九:awk与if的配合使用
判断整数的大小
实例十:wk与数组的使用
统计passwd文件用户数