在文本处理领域,awk是一个强大的工具,它以其简洁高效的语法和丰富的内置功能而备受青睐。本文将介绍awk中常用的特殊变量,这些变量是编写高效、灵活的awk脚本的重要基石。
ARGC:命令行参数数组ARGV中的元素个数。
ARGIND:当前正在处理的文件在ARGV中的索引。
ARGV:命令行参数数组。数组的索引从0到ARGC-1。第一个参数值为“awk”,之后依次为待处理的文件路径名称。动态更改ARGV的内容可以控制awk处理的文件,如果在ARGV中添加或移除元素,则应该相应地修改ARGC的值。
CONVFMT:将数字转换为字符串的printf格式,默认是“%.6g”。
ENVIRON:一个关联数组,包含所有环境变量。例如,ENVIRON["HOME"]返回用户的主目录。环境变量名区分大小写。
FILENAME:当前输入文件的路径名称。在BEGIN操作中,FILENAME的值未定义;在END操作中,该值是处理的最后一个输入文件的路径名称。
FNR:当前文件中的当前输入记录的编号,即在文件中的行号。在BEGIN操作中,FNR的值是0;在END操作中,该值是最后处理的记录在文件中的编号。
FS:输入字段分隔符,可以是一个扩展正则表达式。默认值是空格。
NF:当前记录的字段数量。在BEGIN操作中,除非先执行不带Variable参数的getline函数,否则NF的值未定义;在END操作中,除非在END之前有执行不带Variable参数的getline函数,否则NF的值是处理的最后一个记录而具有的值。
NR:当前输入记录的总数。在BEGIN操作中,NR的值是0;在END操作中,该值是最后处理的记录的编号。
OFMT:在输出语句中将数字转换为字符串的printf格式。默认值“%.6g”。
OFS:输出字段分隔符,缺省值是空格。
ORS:输出记录分隔符,缺省值是换行符。
RLENGTH:由match函数来匹配的字符串的长度。
RS:输入记录分隔符,缺省值是换行符。
RSTART:由match函数来匹配的字符串的起始位置,从1开始,等同于match函数的返回值。
SUBSEP:用于数组中隔开多个下标,缺省值是\031。
FNR与NR比较
它们都代表当前输入记录的编号,FNR是当前输入记录在当前文件中的编号,NR是到目前为止的输入记录的总编号。
假设文件file1和file2的记录数都为3,通过以下命令查看FNR和NR的值:
~$ awk 'BEGIN{print "FILENAME FNR NR"}{printf "%-8s%4d%3d\n",FILENAME,FNR,NR}' file1 file2
FILENAME FNR NR
file1 1 1
file1 2 2
file1 3 3
file2 1 4
file2 2 5
file2 3 6
这个示例演示了特殊变量的使用,以及FNR与NR的区别。
0 comments:
New comments are not allowed.