March 18, 2024

Linux Shell下awk常用的特殊变量

在文本处理领域,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:

VxWorks

Blog Archive