AWK - 内置变量
AWK 提供了几个内置变量。 它们在编写 AWK 脚本时发挥着重要作用。 本章演示了内置变量的用法。
标准 AWK 变量
标准 AWK 变量将在下面讨论。
ARGC
它意味着命令行提供的参数数量。
示例
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
在执行此代码时,您会得到以下结果 −
输出
Arguments = 5
但是为什么当你只传递 4 个参数时 AWK 显示 5 呢? 只需检查以下示例即可消除您的疑问。
ARGV
它是一个存储命令行参数的数组。 数组的有效索引范围从 0 到 ARGC-1。
示例
[jerry]$ awk 'BEGIN { for (i = 0; i < ARGC - 1; ++i) { printf "ARGV[%d] = %s\n", i, ARGV[i] } }' one two three four
在执行此代码时,您会得到以下结果 −
输出
ARGV[0] = awk ARGV[1] = one ARGV[2] = two ARGV[3] = three
CONVFMT
它表示数字的转换格式。 它的默认值为 %.6g。
示例
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
在执行此代码时,您会得到以下结果 −
输出
Conversion Format = %.6g
ENVIRON
它是环境变量的关联数组。
示例
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
在执行此代码时,您会得到以下结果 −
输出
jerry
要查找其他环境变量的名称,请使用 env 命令。
FILENAME
它表示当前文件名。
示例
[jerry]$ awk 'END {print FILENAME}' marks.txt
在执行此代码时,您会得到以下结果 −
输出
marks.txt
请注意 FILENAME 在 BEGIN 块中未定义。
FS
它表示(输入)字段分隔符,其默认值为空格。 您也可以使用 -F 命令行选项来更改它。
示例
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
在执行此代码时,您会得到以下结果 −
输出
FS = $
NF
它表示当前记录中的字段数。 例如,以下示例仅打印包含两个以上字段的行。
示例
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
在执行此代码时,您会得到以下结果 −
输出
One Two Three One Two Three Four
NR
它表示当前记录的编号。 例如,如果当前记录号小于三,则以下示例将打印该记录。
示例
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
在执行此代码时,您会得到以下结果 −
输出
One Two One Two Three
FNR
它类似于 NR,但相对于当前文件。 当 AWK 对多个文件进行操作时,它很有用。 FNR 的值使用新文件重置。
OFMT
它表示输出格式编号,默认值为%.6g。
示例
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
在执行此代码时,您会得到以下结果 −
输出
OFMT = %.6g
OFS
它表示输出字段分隔符,其默认值为空格。
示例
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
在执行此代码时,您会得到以下结果 −
输出
OFS = $
ORS
它表示输出记录分隔符,其默认值为换行符。
示例
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
在执行上述代码时,您会得到以下结果 −
输出
ORS = $ $
RLENGTH
它表示 match 函数匹配的字符串的长度。 AWK 的匹配函数在输入字符串中搜索给定的字符串。
示例
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
在执行此代码时,您会得到以下结果 −
输出
2
RS
它表示(输入)记录分隔符,其默认值为换行符。
示例
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
在执行此代码时,您会得到以下结果 −
输出
RS = $ $
RSTART
它表示 match 函数匹配的字符串中的第一个位置。
示例
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
在执行此代码时,您会得到以下结果 −
输出
9
SUBSEP
它表示数组下标的分隔符,默认值为