Linux awk命令
1.简介
awk是一个强大的我那本分析工具,相对于grep的查找,sed的编辑,awk在齐对数据进行分析并生成报告时,显得尤为强大。
简单的来说,awk就是把文本逐行的读入,以空格为默认分隔符将每行切片,切开的的部分在进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。我们使用最多的是gawk。
2.工作原理
原理1:
当读到第一行时,匹配条件,然后执行指定的操作,接着在读取第二行数据处理,不会默认输出;
如果没有定义匹配条件,则默认时匹配所有数据行,awk隐含循环,条件匹配多少次,动作就会执行多少次。
原理2
逐行读取文本,默认以空格键为分割符,间分割所得的每个字段保存到内建变量中,并按模式或者条件执行编辑命令
sed常用于一整行的处理,而awk则比较倾向于将一行分成多个字段在进行处理。
awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示
3.命令格式
awk [options] ‘{pattern + action}’ {filenames}
-
options 指命令的选项;
-
pattern 指匹配条件;
-
action 指对匹配成功的文本进行处理;
-
filenames 指查找的文件;
awk 的脚本命令主要由 2 部分组成,分别为匹配规则和执行命令。
awk 的匹配规则,和 sed 命令中的 address 部分作用相同,用来指定脚本命令可以作用到文本内容中的具体行,可以时以下任意一种:
-
正则表达式:使用通配符的扩展集;
-
关系表达式:使用运算符进行操作,可以时字符串或者数字的比较测试;
-
默认匹配表达式:用运算符(匹配)和!(不匹配);
-
BEGIN语句块,pattern语句块,END语句块。
另外,整个脚本命令是使用的单引号'',而其中的执行命令部分需要使用花括号{}括起来。{}里面的内容主要是:变量或数据赋值、输出命令、内置函数、以及控制流语句等。
注意,在 awk 程序执行时,如果没有指定执行命令,则默认会把匹配的行输出;如果不指定匹配规则,则默认匹配文本中所有的行。
awk 的主要特性之一是其处理文本文件中数据的能力,它会自动给每行中的每个数据元素分配一个变量
4.命令模式
默认的情况下,awk是逐行处理文本的,也就是先处理完当前行,再处理下一行,这种默认的情况也被称为空模式。而若指定了“条件”,awk命令在处理文本时,只有满足”条件“的行才会被处理,不满足”条件“的行就不会被处理。这其实就是awk命令的模式pattern
awk命令主要有以下几种模式:
-
空模式
即不指定匹配条件,默认一行一行处理文本内容。 -
BEGIN模式
即在开始处理文本之前,需要执行的操作,比如打印表头; -
END模式
即在文本中的所有行都处理完成后,需要执行的操作; -
关系运算模式
即在指定条件时,使用关系操作符,
5.awk内置变量
awk有很多内置变量用来设置环境信息,下面列出一些常用的变量
ARGC 命令行参数个数
ARGV 命令行参数排列,是一个数组
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数,即各文件分别计数的行号
FS 设置输入域分隔符,默认为空白字符
NF 当前记录的域的个数,即当前行被分割成几列
NR 已读记录个数,行号,即当前处理的文本行的行号
OFS 输出域分隔符,默认为空白字符
ORS 输出记录分隔符,输出时用指定的符号代替换行符
RS 输入记录分隔符,指定输入时的换行符