awk是一个报告生成器,它拥有强大的文本格式化的能力,这就是专业的说法。
你可能不理解所谓的报告生成器中的"报告"是什么,你可以把"报告"理解为"报表"或者"表格",也就是说,我们可以利用awk命令,将一些文本整理成我们想要的样子,比如把一些文本整理成"表"的样子,然后再展示出来,刚才概念中提到的"文本格式化的能力",也就是这个意思,其实这样说可能还是不太容易理解,不用着急,当你看到后面的"示例"时,自然会明白awk所擅长的"文本格式化"能力是什么。
awk是由Alfred Aho 、Peter Weinberger 和 Brian Kernighan这三个人创造的,awk由这个三个人的姓氏的首个字母组成。
awk早期是在unix上实现的,所以,我们现在在linux的所使用的awk其实是gawk,也就是GNU awk,简称为gawk,awk还有一个版本,New awk,简称为nawk,但是linux中最常用的还是gawk。
awk从放弃到入门(1):awk基础 (通俗易懂,快进来看)
awk其实是一门编程语言,它支持条件判断、数组、循环等功能。所以,我们也可以把awk理解成一个脚本语言解释器。
grep 、sed、awk被称为linux中的"三剑客"。
我们总结一下这三个"剑客"的特长。
grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理
awk基础
awk基本语法如下,
awk [options] ‘program’ file1 , file2 , ```
对于上述语法中的program来说,又可以细分成pattern和action,也就是说,awk的基本语法如下
awk [options] ‘Pattern{Action}’ file
从字面上理解 ,action指的就是动作,awk擅长文本格式化,并且将格式化以后的文本输出,所以awk最常用的动作就是print和printf,因为awk要把格式化完成后的文本输出啊,所以,这两个动作最常用。
我们先从最简单用法开始了解awk,我们先不使用[options] ,也不指定pattern,直接使用最简单的action,从而开始认识awk
awk是逐行处理的,逐行处理的意思就是说,当awk处理一个文本时,会一行一行进行处理,处理完当前行,再处理下一行,awk默认以"换行符"为标记,识别每一行,也就是说,awk跟我们人类一样,每次遇到"回车换行",就认为是当前行的结束,新的一行的开始,awk会按照用户指定的分割符去分割当前行,如果没有指定分割符,默认使用空格作为分隔符。
0
表
示
显
示
整
行
,
0 表示显示整行 ,
0表示显示整行,NF表示当前行分割后的最后一列(
0
和
0和
0和NF均为内置变量)
注意, N F 和 N F 要 表 达 的 意 思 是 不 一 样 的 , 对 于 a w k 来 说 , NF 和 NF 要表达的意思是不一样的,对于awk来说, NF和NF要表达的意思是不一样的,对于awk来说,NF表示最后一个字段,NF表示当前行被分隔符切开以后,一共有几个字段。
也就是说,假如一行文本被空格分成了7段,那么NF的值就是7,$NF的值就是$7, 而
7
表
示
当
前
行
的
第
7
个
字
段
,
也
就
是
最
后
一
列
,
那
么
每
行
的
倒
数
第
二
列
可
以
写
为
7表示当前行的第7个字段,也就是最后一列,那么每行的倒数第二列可以写为
7表示当前行的第7个字段,也就是最后一列,那么每行的倒数第二列可以写为(NF-1)。
我们说过,awk的语法如下
awk [options] ‘Pattern{Action}’ file
而且我们说过awk是逐行处理的, 刚才已经说过了最常用的Action:print
现在,我们来认识下一Pattern,也就是我们所说的模式
不过,我们准备先把awk中最特殊的模式展示给大家,以后再介绍普通的模式,因为普通模式需要的篇幅比较长,所以我们先来总结特殊模式。
AWK 包含两种特殊的模式:BEGIN 和 END。
BEGIN 模式指定了处理文本之前需要执行的操作:
END 模式指定了处理完所有行之后所需要执行的操作: