93. GAWK 内置环境变量
本节中讨论的内置变量仅在 GAWK 中可用。
ENVIRON
当您想要访问 awk 脚本中的 shell 环境变量时,这非常有用。
是一个包含所有环境值的数组。
ENVIRON
数组的索引是环境变量名称。
例如,数组元素 ENVIRON["PATH"]
将包含
PATH
环境变量的值。
以下示例打印所有可用的环境变量及其值。
$ cat environ.awk
BEGIN {
OFS="="
for(x in ENVIRON)
print x,ENVIRON[x];
}
$ awk -f environ.awk
SHELL=/bin/bash
PATH=/home/ramesh/bin:/usr/local/sbin:/usr/local/bin:/u
sr/sbin:/usr/bin:/sbin:/bin:/usr/games
HOME=/home/ramesh
TERM=xterm
USERNAME=ramesh
DISPLAY=:0.0
AWKPATH=.:/usr/share/awk
IGNORECASE
默认情况下
IGNORECASE
设置为 0。因此,awk 程序区分大小写。
当您将
IGNORECASE
设置为 1 时,awk 程序变得不区分大小写。这将影响正则表达式和字符串比较。
以下内容不会打印任何内容,因为它正在寻找带有小写 "v"
的 "video"
。 但是,「items.txt」 文件仅包含带有大写 "V"
的 "Video"
。
awk '/video/ {print}' items.txt
但是,当您将
IGNORECASE
设置为 1 并搜索 "video"
时,它将打印包含 "Video"
的行,因为它不会进行区分大小写的模式匹配。
$ awk 'BEGIN{IGNORECASE=1} /video/ {print}' items.txt
101,HD Camcorder,Video,210,10
正如您在下面的示例中看到的,这适用于字符串和正则表达式比较。
$ cat ignorecase.awk
BEGIN {
FS=",";
IGNORECASE=1;
}
{
if ($3 == "video") print $0;
if ($2 ~ "TENNIS") print $0;
}
$ awk -f ignorecase.awk items.txt
101,HD Camcorder,Video,210,10
104,Tennis Racket,Sports,190,20
ERRNO
当使用 I/O 操作(例如:getline
)时出现错误时,
ERRNO
变量将包含相应的错误消息。
以下示例尝试使用 getline
读取不存在的文件。在这种情况下,
ERRNO
变量将包含 "No such file or directory"
消息。
$ vi errno.awk
{
print $0;
x = getline < "dummy-file.txt"
if ( x == -1 )
print ERRNO
else
print $0;
}
$ awk -f errno.awk items.txt
101,HD Camcorder,Video,210,10
No such file or directory
102,Refrigerator,Appliance,850,2
No such file or directory
103,MP3 Player,Audio,270,15
No such file or directory
104,Tennis Racket,Sports,190,20
No such file or directory
105,Laser Printer,Office,475,5
No such file or directory