作为一个处理数据的高效语言,awk支持脚本输入使得编程变得便利。我们来看看awk的基本编程结构--变量。
变量:awk中支持数值变量和字符串变量,支持默认初始化和强制类型类型转换。
注意:awk中的变量是无需声明直接使用的,到底是哪一个类型是由上下文来决定的。
未经初始化的变量值是0或者"" (空字符串),究竟是哪个是也根据上下文决定的。
name="Tom" #name是字符串
x++ #x是数值,它被初始化为0,然后+1
字符串强制转换成数字:name+0
数字转换成字符串: number " "
1. 用户自定义变量:用户自定义的字符串可以由数字,字母和下划线构成,但是不能以数字开头。 格式:variable = expression
用户自定义的变量也是不用声明直接使用的。默认初始化也是根据上下文决定为0还是" "的。
支持命令行中自定义参数的输入,就好像在脚本中生成一样。
awk -f awkscript month=4 year=2013 filename
#month year就可以以输入值在awkscript中直接使用,但不能在BEGIN模块中使用。
2. 字段变量:也可以像自定义变量那样使用,区别在于它们的初始化是引用的某个记录或者字段。可以重新赋值运算,转换类型等。
$0 整行记录
$1 第一个字段
$2 第二个字段等
eg:awk '{$5=1000*$3+$4; print}' file1
注意:如果某个字段在记录中不存在的,那个那个字段使用时是被赋予空字符串的。
如:第二行分割成只有 5个字段,那么 $6=" "
3. 内置变量:内置变量的名字都是大写的。他们可以用于表达式也可以被重新赋值。
常用的内置变量:
FS 输入记录的字段分割符,默认为空格,可多个并列
RS 输入记录的分隔符,默认是换行号("\n")
OFS 输出记录时字段的分隔符,默认是空格
ORS 输出记录的分割符,默认是换行符
NF 输入记录被分割成的字段数
NR 当前输入记录的个数(不一定是行数,因为输入分割符不一定是换行号)
FNR 当前文件的总记录数
FILENAME 当前处理的文件名
ARGC 命令行输入参数的数目
ARGV 命令行输入参数的数组 (类似于java中main函数的 args[ ] 参数)