精通awk系列(25):awk选项和内置变量的含义
回到:
awk选项、内置变量
选项
1 | -e program-text |
预定义变量
预定义变量分为两类:控制awk工作的变量和携带信息的变量。
第一类:控制AWK工作的预定义变量
RS
:输入记录分隔符,默认为换行符\n
,参考RSIGNORECASE
:默认值为0,表示所有的正则匹配不忽略大小写。设置为非0值(例如1),之后的匹配将忽略大小写。例如在BEGIN块中将其设置为1,将使FS、RS都以忽略大小写的方式分隔字段或分隔recordFS
:读取记录后,划分为字段的字段分隔符。参考FSFIELDWIDTHS
:以指定宽度切割字段而非按照FS。参考FIELDWIDTHSFPAT
:以正则匹配匹配到的结果作为字段,而非按照FS划分。参考FPATOFS
:print命令输出各字段列表时的输出字段分隔符,默认为空格” “ORS
:print命令输出数据时在尾部自动添加的记录分隔符,默认为换行符\n
CONVFMT
:在awk中数值隐式转换为字符串时,将根据CONVFMT的格式按照sprintf()的方式自动转换为字符串。默认值为”%.6gOFMT
:在print中,数值会根据OFMT的格式按照sprintf()的方式自动转换为字符串。默认值为”%.6g
第二类:携带信息的预定义变量
ARGC
和ARGV
:awk命令行参数的数量、命令参数的数组。参考ARGC和ARGVARGIND
:awk当前正在处理的文件在ARGV中的索引位置。所以,如果awk正在处理命令行参数中的某文件,则ARGV[ARGIND] == FILENAME
为真FILENAME
:awk当前正在处理的文件(命令行中指定的文件),所以在BEGIN中该变量值为空ENVIRON
:保存了Shell的环境变量的数组。例如ENVIRON["HOME"]
将返回当前用户的家目录NR
:当前已读总记录数,多个文件从不会重置为0,所以它是一直叠加的- 可以直接修改NR,下次读取记录时将在此修改值上自增
FNR
:当前正在读取文件的第几条记录,每次打开新文件会重置为0- 可以直接修改FNR,下次读取记录时将在此修改值上自增
NF
:当前记录的字段数,参考NFRT
:在读取记录时真正的记录分隔符,参考RTRLENGTH
:match()函数正则匹配成功时,所匹配到的字符串长度,如果匹配失败,该变量值为-1RSTART
:match()函数匹配成功时,其首字符的索引位置,如果匹配失败,该变量值为0SUBSEP
:arr[x,y]
中下标分隔符构建成索引时对应的字符,默认值为\034
,是一个不太可能出现在字符串中的不可打印字符。参考复杂数组
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 骏马金龙!
评论