awk是由匹配模式和动作组成:
#### 1-BEGIN和END两张特殊类型模式,没有针对输入进行测试
BEGIN
END
#### 2 BEGINFILE和ENDFILE是附加的特殊模式,它们的主体在读取每个命令行输入文件的第一条记录之前以及在读取每个文件的最后一条记录之后执行。 在BEGINFILE规则内,如果文件成功打开,ERRNO的值将为空字符串。 否则,文件存在一些问题,代码应使用nextfile跳过它。 如果没有这样做,gawk会对无法打开的文件产生通常的致命错误。
BEGINFILE
ENDFILE
#### 3 正则表达式模式在输入记录与正则表达式匹配时候执行关联语句,其表达形式与egrep语句相同
/regular expression/
relational expression
#### 4 &&逻辑与,||逻辑或 !逻辑非 ?:与c一样三目运算
pattern && pattern
pattern || pattern
pattern ? pattern : pattern
(pattern)
! pattern
#### 5 范围模式:它匹配与pattern1匹配的的所有输入记录,指导匹配patteran2的记录
pattern1, pattern2
大部分情况下都是按照这一个思路在编写awk的代码,写出这样的代码:
cat test | awk 'BEGIN {print "SUM:"} {print $1} END {print "END SUM!!!"}'
实际上awk的语法应该是这样的:
awk ‘pattern{action}pattern{action}…’ file
会有多个模式匹配和action,每个模式匹配都会依次执行。
匹配表达式
hello 123 123
wang 100 bcd
zhng 180 abc
abc
awk '/bc/{$2=$2+ 100} NR %2==0 {print $0} ' a.log
wang 200 bcd
abc 100
awk '/bc/{$2=$2+ 100} NR %2==0 {print $0} 1' a.log
hello 123 123
wang 200 bcd
wang 200 bcd
zhng 280 abc
abc 100
abc 100
最后的1表示永真,对应默认的action行为: {print $0}
awk '$1~/wan/{$2=$2+ 100} NR %2==0 {print $0} ' a.log
wang 200 bcd
abc
~表示正则为真,