最近开学了...各种事情忙碌着。
一方面由于基地管理层有些人出现不给力的情况,弄得挺失望的。
但是很清楚,无论怎样都得坚持完自己的任期...相信这一个过程中自己也一定能学习成长不少的。
21.1 使用变量(内建变量、自定义变量)
21.1.1 内建变量
1.字段和数据行分隔符变量,在命令行用-F定义或在脚本给FS赋值
################gawk数据字段和数据行变量###########################
FIELDWIDTHS 由空格分隔的定义了每个数据字段确切宽度的一列数字,
FS 输入字段分隔符
RS 输入数据行分隔符
OFS 输出字段分隔符
ORS 输出数据行分隔符
###################################################################
注意:一旦设置了FIELDWIDTHS变量,gawk就会忽略FS变量.如FIELDWIDTHS="2 2 2 2"把行数据分为2个字符长的四个字段
#################更多的gawk内建变量#####################################
ARGC 当前命令行参数个数
ARGIND 当前文件在ARGV中的闻之
ARGV 包含命令行参数的数组
CONVFMT 数字的转换格式;默认%.6 g
ENVIRON 当前shell环境变量及其值组成的关联数组
ERRNO 当读取或关闭输入文件发生错误时的系统错误号
FILENAME当作gawk输入数据的数据文件的文件名
FNR 当前数据文件中的数据行数
IGNORECASE 设成非零值时,忽略gawk命令中出现的字符串的字符大小写
NF 数据文件中的字段总数
NR 已处理的输入数据行数目
OFMT 数字的输出格式
RLENGTH 由match函数所匹配的子字符串的长度
RSTART 由match函数所匹配的子字符串的起始位置
##########################################################################
$ gawk '
>BEGIN{
>print ENVIRON["HOME"] #数组索引中的文本是shell环境变量,而数组的值则是shell环境变量的值
>print ENVIRON['PATH']
>}‘
21.1.2 自定义变量
$ gawk '
>BEGIN{
>testing="lijiancai"
>print testing
>}'
*赋值语句可以包含数学表达算式来处理的数字值
2.在命令行上给变量赋值
$ cat script
BEGIN{FS=","}
{print $n}
$gawk -f script n=2 data #允许改变n的值,从而输出不同的数据字段
但是当变量放在BEGIN的代码段中,就不能赋值了,如果要赋值把-v命令行参数放在脚本代码之前,如:$gawk -v n=2 -f script data
21.2.1 自定数组变量
var[index] = element
$gawk 'BEGIN{
>test["one"] = "testing"
>print test["one"]
>}'
21.2.2 遍历数组变量
for (var in array)
{
statements
}
*for语句会在每次将关联数组array的下一个索引值赋给变量var,注意变量保存的是索引值而不是数组元素值。
21.2.3 删除数组变量
delete array[index] :删除命令会从数组中删除关联数组的索引值和相关的数据元素值
21.3.1 正则表达式:正则表达式必须放在它要控制的程序脚本的左花括号前
$ gawk 'BEGIN{FS=","} /test/{print $1}' data1 #输出匹配了test的行的第一个数据段
21.3.2 匹配操作符~:允许将正则表达式限定在数据行中的特定数据字段。
$ gawk 'BEGIN{FS=","} $2 ~ /^data/{print $0}' data1 #匹配第二个数据字段,且此表达式要以data开头
*格式:数据字段变量 ~ 正则表达式
注意:可以用!符号来排除正则表达式的匹配,如果没有找到匹配的文本,拿程序脚本就会作用到数据行。
$ gawk -F: '$1 !~ /love/{print $1,$NF}' /etc/passwd #打印出第一字段不匹配此项的数据行的第一个字段和最后一个字段
21.3.3 数学表达式,也可一在匹配模式中使用数学表达式。
* x == y
* x <= y
* x < y
* x >= y
* x > y
当然也可一对文本数据使用这些表达式。如$ gawk -F, '$1 == "data"{print $1}' data