linux世界中最普遍使用的两个命令行编辑器:linux
编程语言共有的特性是使用变量来存取值。gawk编程语言支持两种不一样类型的变量:正则表达式
gawk程序使用内建变量来引用程序数据里的一些特殊功能。shell
1.1.1 字段和记录分隔符变量编程
变量 | 描述 |
FIELDWIDTHS | 由空格分隔开的定义了每一个数据字段确切宽度的一列数字 |
FS | 输入字段分隔符 |
RS | 输入数据行分隔符/记录分隔符 |
OFS | 输出字段分隔符 |
ORS | 输出数据行分隔符/记录分隔符 |
变量OFS时用在print命令的输出上面, 默认状况下gawk将OFS设置成空格。经过设置OFS的值,能够再输出中使用任意字符串来分割字段。数组
FIELDWIDTHS变量容许不使用字段分隔符来读取记录,一旦设置了FIELDWIDTHS变量,gawk就会忽略FS变量,并根据提供的字段宽度来计算字段。编程语言
默认状况下,gawk将RS、ORS设为换行符 。 默认RS代表输入数据流中的每行新文本就是一条新纪录。编辑器
典型例子就是,FS变量设置成换行符,代表数据流中的每行都是一个单独的字段,每行的全部数据都属于同一个字段。
RS变量设置成空字符串,而后在数据记录中留一个空白行,便是把每一个空白行当作一个记录分隔符。函数
1.1.2 数据变量spa
变量 |
描述 |
ARGC |
出现的命令行参数的个数 |
ARGIND |
当前正在处理的文件在ARGV中的索引 |
ARGV |
命令行参数数组 |
CONVFMT |
数字的转换格式(参见printf语句)。默认值为%.6g |
ENVIRON |
当前shell环境变量及其值的关联数组 |
ERRNO |
当读取或关闭输入文件时发生错误时的系统错误 |
FILENAME |
用于输入到gawk程序的数据文件的文件名 |
FNR |
数据文件的当前记录号 |
IGNORECASE |
若是设置为非0,则忽略gawk命令中使用的字符串的大小写 |
NF |
数据文件中数据字段的个数 |
NR |
已处理的输入记录的个数 |
OFMT |
显示数字的输出格式。默认为%,6g |
RLENGTH |
匹配函数中匹配上的子字符串的长度 |
RSTART |
匹配函数中匹配上的子字符串的开始索引 |
以上代表,AGRC变量代表命令行上面有两个参数,gawk和adta.txt 。ARGV数组从索引0开始,ARGV[1]就是data.txt
1.2.1 在脚本中给变量赋值
gawk程序给变量赋值跟在shell脚本中赋值相似,都用赋值语句。
gawk变量能够保存数值或文本值,也可包含数学算式来处理数字值。
1.2.2 在命令行上给变量赋值
gawk程序能够在命令行上给变量赋值。
存在一个问题: 若设置了变量后,这个值在打码的BEGIN部分不可用。
解决办法:
可使用-v命令行参数,它容许你在BEGIN代码以前设定变量,在命令行上,-v命令行参数必须放在脚本代码以前。
关联数组和数字数组不一样之处就是它的索引值可使任意文本字符串。
关联数组用各类字符串来引用值,每一个索引字符串都必须可以惟一地表示出赋给它的数据元素。
1 var[index]= element
index 是关联数组的索引值,element是数据元素值。
1 for (var in array) 2 { 3 statements 4 }
1 delete array[index]
删除命令会从数组中删除关联索引值和相关的数据元素值。
gawk使用正则表达式时,正则表达式必须出如今它要控制的程序脚本的左侧花括号前面。
以上正则表达式/11/匹配了数据字段中含有字符串11的记录。
以上显示脚本查看第4个数据字段含有值为0的记录,即显示属于root用户组的系统用户。
1 if (condition) 2 statement1
if (condition) statement1
1 if (condition) 2 statement1; 3 else 4 statement2
if (condition) statement1; else statement2
while (condition) { statements }
1 do 2 { 3 statements 4 } while (condition)
保证了语句在条件被求值以前至少执行一次。
1 for (variable assignment;condition;iteration process)
printf format, item1, item2, ...
格式化指定符采用以下格式:
1 都以%开头,后跟一个字符
除了以上控制字母,还有3中修饰符:
1 function name([variables]) 2 { 3 statements 4 }
在定义函数时,必须出如今代码块以前(包括BEGIN代码块)。
gawk可使用将多个函数放置在一个库文件中,经过调用库文件使用全部的函数。
....