awk中有许多系统变量或内置变量。
这里分两种:
--可以改变的系统变量(比如默认的字段和记录分隔符)
--不可以改变的,由awk系统自己更新的变量(当前记录的编号和输入文件名)
FS:
字段分隔符,默认值是一个空格
NF:当前输入记录的字段个数
RS:定义为一个换行符
NR:定义为输入的行数
ORS:与RS等效的输出,默认也是一个换行符
OFS:与FS等效的输出,默认值也是一个空格
·现在举例说明:
--定义一个marks.txt文件,内容如下:
john 85 92 78 94 88
andrea 89 90 75 90 86
jasper 84 88 80 92 84
--使用awk命令:
[root@CentOS awk_test]# awk '{ total=$2+$3+$4+$5+$6; avg=total/5; print NF,"\t" NR ".",$1,total/5 RS }' marks.txt
计算平均值并且打印,结果如下:
6
1. john 87.4
6 2. andrea 86
6 3. jasper 85.6
两个重点数字解析:
6 ==》 即为 NF的值,上面已说过
NF表示当前输入记录的字段个数,拿第一行来说:
john 85 92 78 94 88,以空格为分隔符,这里一共有6个字段,所以NF值为6.
1 ==》 即为NR的值,NR表示输入的行数,相当于一个变量,处理一行时增加1,所以等到awk命令处理完,可以 用 END{print NR} 来显示一共有多少行输出。
如果我把命令改一下,使用下面的命令:
[root@CentOS awk_test]# awk 'BEGIN { OFS="****" } { total=$2+$3+$4+$5+$6; avg=total/5; print NF,"\t" NR ".",$1,total/5 RS }' marks.txt
即把OFS=“****”,则会发生如下情况:
6**** 1.****john****87.4
6**** 2.****andrea****86
6**** 3.****jasper****85.6
之前的 , 符号本来是一个空格(OFS的默认值),这里已经变成了 **** 。
同理,ORS也一样可以改变。
========================== 全文完 =====================