你的位置:首页 > 软件开发 > 操作系统 > linux 关于AWK解析(三)

linux 关于AWK解析(三)

发布时间:2017-09-25 17:00:26
AWK变量 对于awk来说“变量”又分为“内置变量”和“自定义变量”,“输入分隔符FS”和“输出分隔符OFS”都属于内置变量。内置变量就是awk预定义好的,内置在awk内部的变量,而自定义变量就是用户定义的变量。 我们先看看awk常用的一些内置变量及其作用:FS:输入字符 ...

linux 关于AWK解析(三)

 


 

AWK变量


 

对于awk来说“变量”又分为“内置变量”和“自定义变量”,“输入分隔符FS”和“输出分隔符OFS”都属于内置变量。

内置变量就是awk预定义好的,内置在awk内部的变量,而自定义变量就是用户定义的变量。

 

我们先看看awk常用的一些内置变量及其作用:

FS:输入字符风隔符,默认为空白字符

OFS:输出字段分隔符,默认为空白 字符

RS:输入记录分隔符(输入换行符),指定输入时的额换行符

NF:number of Field,当前行的字段的个数,字段数量

NR:行号,当前处理的文本行的行号

FNR:各文件分别计数的行号

FILENAME:当前文件名

ARGC:命令行参数的个数

ARGV:数组,保存的是命令行所给定的各参数

内置变量


内置变量NR

首先我们看一下NR的例子:

test文件中一共有两行文本,使用空格隔开,第一行有4列,第二行有5列

 linux 关于AWK解析(三)

而内置变量NR每一行的行号,内置变量NF表示每一行中一共有几列,我们试试怎么得到每一行的行号以及每一行对应的列数量。

linux 关于AWK解析(三)

 

或者,我们试试利用NR内置变量。先打印行号,再打印出整行的内容,然后在添加行号进行输出:

linux 关于AWK解析(三)


内置变量FNR

让我们试试使用awk同时处理多个文件,并且使用NR显示行号:

 linux 关于AWK解析(三)

 

再试试如何利用内置变量FNR显示两个文件的行号:

 linux 关于AWK解析(三)

它的作用就是当awk处理多个文件是,分别对每个文件的行数进行计数。


内置变量RS

 现在我们来看看RS这个变量,RS是输入行分隔符,默认的“行分隔符”就是“回车换行”。

我们试试让awk以为每次遇到一个空格就是新的一行,怎么做呢?例:

linux 关于AWK解析(三)

我们先使用了默认的“回车换行”作为“行分隔符”输出test1文本,这时显示文本一共有2行。

我们又指定了使用“空格”作为“行分隔符”输出test1文本,这时显示一共8行。

当我们指定使用空格作为“行分隔符”时,在awk解析文本时,每当遇到空格,awk就认为遇到的空格是换行符,于时awk就将文本换行了,而此时人类理解的“回车换行”,对于awk来说并不是所谓的换行符,所以才会出现上图中第4行的现象,即使我们看是两行文本,但是awk的世界观里,他就是一行。

这就是输入行分隔符的使用方法,同理,我们来看看“输出行分隔符”。

内置变量ORS

默认情况下,awk将人类眼中的“回车换行”,当做“输出行分隔符”,此时,awk的“世界观”与我们的“世界观”是相同的。

现在,我们改变一下awk的想法,我们让awk认为“+++”是真正的输出行分隔符。如图:

linux 关于AWK解析(三)

我们制定了“行输出行分隔符”为“+++”那么,当awk在输出文字的时候,如果想要换行,就会“另起一行(+++)”,所以,对于awk来说。它完成了“另起一行”的动作,只不过他所认为的“另起一行”的动作输出为“+++”而不再是原来的输出“回车换行”。

我们试试“输出换行符”和“输入换行符”同时使用,看看什么效果,如图:

linux 关于AWK解析(三)

内置变量FILENAME

FILENAME这个内置变量,从字面上就能看出是什么意思,就是显示文件名,如图:

linux 关于AWK解析(三)

内置变量ARGC与AEGV

ARGC内置变量表示命令行参数的个数,什么意思呢?我们先看看ARGV。

别看错了啊。

一个是ARGC,

一个是ARGV,

先看看ARGV。

ARGV内置变量表示是一个数组,这个数组中保存的是命令行所给定的参数,来,我们看看示例:

linux 关于AWK解析(三)

上边的示例,我们先使用BEGIN模式,输出字符串“aaa”,然后,传入两个文件的文件名作为参数,我们发现,BEGIN模式正常执行了打印动作,输出“aaa”字符串,我们使用同样的命令,同样使用BEGIN模式,只不过,这次不只打印“aaa”,还打印ARGV这个数组中第二元素的值。

ARGV表示的是一个数组,就需要引用元素的值,ARGV内置变量表示的是:所有参数组成的数组。如果是ARGV【0】对应的是哪个参数呢?看图!

linux 关于AWK解析(三)

第一个参数就是AWK本身,awk就是这么规定的,'pattern{action}'并不被看做是参数,awk被看为参数。

来,我们在看看ARGC变量的作用,

在刚才的例子中,应该有三个参数,awk,test1,test,这三个参数作为数组的元素存放于ARGV中,现在,而ARGC则表示参数的数量,也可以理解为ARGV数组的长度,看图!

linux 关于AWK解析(三)

自定义变量

顾名思义,就是用户定义的变量,有两种方法可以自定义变量。

方法一:-v varname=value 变量区分字符大小写。

方法二:在program中直接定义。

我们看一些例子,就能明白这两种方法。看图!

通过方法一自定义变量。

linux 关于AWK解析(三)

方法二自定义变量,直接在program中定义即可,注意变量定义与动作之间需要用分号“;”隔开。

linux 关于AWK解析(三)

也可以一次性定义多个变量:

 linux 关于AWK解析(三)

方法一看上去比较麻烦,但是这种方法也有自己的优势

当我们需要在AWK中引用shell中的变量的时候,则可以通过这种方法间接的引用,看图!

linux 关于AWK解析(三)

这些就是awk变量的使用方法,希望对你有所帮助!

原标题:linux 关于AWK解析(三)

关键词:linux

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录