对于awk来说,变量分为“内置变量”和“自定义变量”。内置变量就是awk预先定义好的,内置在awk内部的变量,而自定义变量就是用户定义的变量。
awk常见的内置变量:
FS:输入字段分隔符,默认为空白字符
OFS:输出字段分隔符,默认为空白字符
RS:输入记录分隔符(输入换行符),指定输入时的换行符
ORS:输出记录换行符(输出换行符),输出时指定符号代替换行符
NF:number of field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR:行号,当前处理的文本行行号。
FNR:各文件分别计数的行号
FILENAME:当前文件名
ARGC:命令行参数的个数
ARGV:数组,保存的是命令行所给定的各个参数
1.内置变量NR
如上所示,NR是行数,NF是列数,test1文件中,第一行有4个字段,默认分隔符为空格,所以NF(列数)为4.第二行有5列。FILENAME为文件名,FNR为每个文件中的行数序号,test1中有两行,test文件中也有两行,NR则是不分文件计行数,两个文件一共四行,最后print出当行所有数据。
在awk中,只有在引用$0,$1等内置变量的值的时候才会用到“$”,引用其他变量时,不管是内置变量,还是自定义变量都不使用“$”,而是直接使用变量名。
2.内置变量RS
RS是输入行分割符,默认“行分隔符”就是“回车换行”。如果我们想要把空格作为行分割符,让awk认为每遇到一个空格就换一次行。示例如下:
如上所示,在第四行时ddd之后换行,但是在awk眼中,空格才是换行,所以下面的8ua在awk眼中还是属于第四行。
3.ORS:输出行分隔符
如下所示,我们把“+++”设定为换行符,由下可知,虽然第一行第二行都是在一行中,但是在awk眼中,它是有两行的,可见行号跟“+++”换行符。
4.内置变量ARGC与ARGV
注,第一个参数是awk本身。
5.自定义变量:即用户定义的变量
方法一:-v varname=value 变量名区分字符大小写
方法二:在program中直接定义。
注:变量定义与动作之间需要用分号”;“隔开。