一 空白和注释:
(1)注释:awk里的注释以#开始到该行结束。
(2)空白:任何地方都可以有空白,也允许任意长度的空白,适时的使用空行与缩进,会增进程序的可读性。
二 字符串与字符串表达式:
(1)字符串:
1.awk里的字符串常量以引号定界,如:"hello world"。
2.awk字符串包含零至多个字符,且在字符串的长度上没有限制,视可用内存而定。
3.awk提供许多内建函数来处理字符串,详见awk(五)函数。
4.字符串的比较,用的是传统的==、!=、<、<=、>、>=等,返回1为真,0为假。
5.awk无特殊的字符串连接运算符,即两个字符串会自动连接在一起。如:s="hello" "world"。
6.将数字转化为字符串:n=123,s="" n,把“123”赋给s。
7.字符串转数字:s="123",接着n=0+s,将数值123赋给n。
(2)字符串表达式:
1.awk的强大在于对正则表达式的支持。
2.有两个运算符:~(匹配)和!~(不匹配)。
3.正则表达式常量可以用:引号或斜杠定界。如:"ABC"~/[A-Z]/。斜杠形式常见。
三 数值与数值表达式:
(1)数值:awk里的数字,都以双精度的浮点数表示。
1.因为都是浮点数表示,所以计算次序很重要。
2.awk的数值操作符(优先级由大到小):可以用括号控制计算次序。
(2)awk提供一些通用的基本数学函数。如:int():返回其参数的整数部分,sqrt()等等。
四 标量变量:
(1)标量变量:保存单一值的变量。
1.变量无需事先声明。在使用时,自动创建。
2.awk变量名称必须以ASCII字符或下划线开始。
3.awk对变量名大小写敏感。建议:局部变量全部小写,全局变量第一个字母大写,内建变量则全是大写。
(2)常用内建变量:
五 数组变量:
(1)awk允许以任意数字或字符串表达式作为数组索引,元素不必是相同类型。
1.awk里的数组无需声明和配置:数组的存储空间在引用新元素时会自动增长。
2.数组的存储空间是稀疏(sparse)的:只有被引用到的元素才会配置。例如:a[1]="sss",后接a[1000]="aaa",而不必填充2到999。
3.awk通过“以逗号分隔的索引列表”看作一个字符串,使用多个索引模拟数组。如:array[lyr,23,man]="no1"。
(2)删除元素和数组:
1.删除元素:delete array[index]。
2.删除数组:delete array。
六 命令行参数:
(1)awk内建变量:
1.ARGC(参数计数)。
2.ARGV(参数向量)。
3.参数值存储在0、1、...、ARGC-1,且ARGV[0]是awk程序本身的名称。
4.与-f与-v选项结合的参数是不可使用的,任何命令行程序也不可使用。
5.awk一见到特殊--选项,它会立即停止将参数解释为选项。
七 环境变量:
(1)awk提供访问内建数组ENVIRON中所有环境变量:
1.awk 'BEGIN { print ENVIRON["HOME"];print ENVIRON["USER"] }'