awk学习系列
awk简介
awk 早期是在Unix上实现的,所以我们现在再linux的所使用的awk其实就是gawk,也就是GUN awk.awk,也是最常用的版本
awk 其实是一门编程语言,它支持条件判断、数组、循环等功能,所以,我们也可以吧awk 理解成一个脚本语言解释器
grep、sed、awk被称为linux中的三剑客
我们总结一下这三个剑客的特长
grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配的文本
awk 格式化文本,对文本进行复杂格式化处理
awk 语法格式:
awk [options ] ‘program’ file1,file2 ,…
对于上述语法中的program来说,又可以细分为 pattern 和action 也就是说 awk 的基本语法如下:
awk [options] 'Pattern{Action} ’ file
从字面上理解,action 指的动作,awk 擅长文本格式化,并且将格式化以后的文本输出,所以awk最常用的动作就是print 和printf, 因为awk要把格式化完成后的文本输出所以这两个动作最常用
我们先从最简单的用法开始,我们先不使用[option],也不指定Pattern,直接使用最简单的action,示例如下:
[root@master-129 ~]# echo ddddd > test1
[root@master-129 ~]# awk ‘{print}’ test1
ddddd
[root@master-129 ~]#
我们只是执行了一个打印的动作,将test1文本的内容打印出来
现在我们来操作以下另一个类似的场景
上图总的实例没有使用到option 和pattern,,上图中的awk ‘{print $5}’,表示输出df的信息的第5列,$5表示将当前行按照分隔符分割后的第五列,不指定分隔符,默认使用空格为分隔符
我们也可以一次输出多列,使用逗号隔开要输出的多个列。如下:
或者指定的列
第一行没有第5列所以没有输出,而第二行有第五列所以有输出
除了输出文本中的列,我们还能添加自己指定的字段进行拼接
字符拼接
注意: $1 这种内置变量外不能加双引号 ,否则不能当文本输入
实例如下:
我们说过awk的语法如下:
awk [option] ‘Pattern {action}’ file
刚才已经说过最常用的Action:print
现在我们来认识一下pattern(模式) ,
我们先介绍特殊的模式
awk 包含两种特殊的模式: begin 和end
BINGEN 模式指定处理文本之前需要的操作:
END 模式指定处理完所有行之后所需要的操作
先从begin开始,示例如下:
再开始处理test文件之前,先执行打印操作,输出的内容为“aaa,bbb”
如果我们想要awk先执行begin模式指定的动作,再根据执行我们定义的动作操作文本
end模式就是在处理完所有指定的文档后,指定的动作
那么我们可以结合begin和end模式一起使用