在本节讨论的内置变量只适用于GAWK 。
当你想访问shell环境变量在awk脚本里,这是非常有帮助的。 ENVIRON是包含所有的环境值的数组。ENVIRON数组索引是环境变量名。
例如,数组元素ENVIRON [“path”]将包含PATH环境变量的值。
下面的例子打印所有可用的环境变量及其值。
$ cat environ.awk
BEGIN {
OFS="="
for (x in ENVIRON)
print x, ENVIRON[x];
}
$ awk -f environ.awk
TERM=xterm-256color
G_BROKEN_FILENAMES=1
SHLVL=1
PWD=/home/luckyzhou
HISTTIMEFORMAT=[%Y.%m.%d %H:%M:%S]
PATH=/usr/java/jdk1.6.0_45/bin:/data/mysql/bin:/usr/local/zabbix/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/home/luckyzhou/bin
......中简省略N行
JAVA_HOME=/usr/java/jdk1.6.0_45
MySQL_HOME=/data/mysql
SHELL=/bin/bash
LESSOPEN=|/usr/bin/lesspipe.sh %s
LOGNAME=luckyzhou
HOME=/home/luckyzhou
HISTCONTROL=ignoredups
SSH_CLIENT=218.79.224.241 56251 22
默认情况下IGNORECASE设置为0,所以, awk程序是区分大小写的。
当您设置IGNORECASE 1 , awk程序变得不区分大小写。这将影响到正则表达式和字符串比较。
以下将不打印任何东西,因为它是寻找"video"与小写字母"v" 。但是,该items.txt文件只包含"Video"用大写“V”。
$ cat items.txt
101,HD Camcorder,Video,210,10
102,Refrigerator,Appliance,850,2
103,MP3 Player,Audio,270,15
104,Tennis Racket,Sports,190,20
105,Laser Printer,Office,475,5
$ 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
当使用的I / O操作(例如:函数getline )时有一个错误, errno变量将包含相应的错误信息。
下面的例子是试图读取不存在使用函数getline一个文件。在这种情况下, errno变量将包含“没有这样的文件或目录”的消息。
$ cat errno.awk
{
print $0;
x = getline < "dumm-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