[root@localhost ~] # awk 'BEGIN{x=2;y=3;print x**y,x^y,x*y,x/y,x+y,x-y,x%y}'
8 8 6 0 .666667 5 -1 2
赋值运算符
条件运算符
awk 中的条件运算符只有一个,其语法如下: expression?value1:value2
这是一个三目运算符,当表达式 expression 的值为真时,返回值为 value1 ;否则,返回值为 value2 。
示例:
[root@localhost ~] # cat file
3 6
10 9
3 3
[root@localhost ~] # awk '{max=$1>$2?$1:$2;print NR,"max=",max}' file
1 max = 6
2 max = 10
3 max = 3
逻辑运算符
awk 支持 3 种逻辑运算,分别为逻辑与、逻辑或和逻辑非
关系运算符
[root@localhost test11] # awk '$1~/^w/ {print}' file
wangmei 70
[root@localhost ~] # awk -F: 'BEGIN {printf "%-10s %-5s
%-15s\n","user","uid","shell"} $3==0,$7~"nologin" {printf "%-10s %-5s
%-15s\n",$1,$3,$7}' /etc/passwd
user uid shell
root 0 /bin/bash
bin 1 /sbin/nologin
[root@localhost ~] # awk -F: 'BEGIN {printf "%-10s %-5s
%-15s\n","user","uid","shell"} $3==0,$7~"nologin" {printf "%-10s %-5s
%-15s\n",$1,$3,$7} END{print "-------end---------"}' /etc/passwd
user uid shell
root 0 /bin/bash
bin 1 /sbin/nologin
-------end---------
说明: $3 == 0 , $7 ~ "nologin" 表示匹配符合条件 1 到条件 2 之间的所有行(成对多次匹配),如果条件 2
不成立,则一直匹配到文件尾部
[root@localhost ~] # cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t"
$3}' 查阅 /etc/passwd 文件第三列小于 10 以下的数据,并且仅列出账号与第三列。但是这样的写法
会导致第一行无法正确显示出来,由于读入第一行的时候,变量 $1 , $2…… 默认还是以空格符为分隔的,
定义的 FS=“ : ” 仅能在第二行后才开始生效。可以使用 BEGIN 这个关键字来达到从第一行读入。
[root@localhost ~] # cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1
"\t" $3}'
[root@localhost ~] # cat /etc/passwd | awk -F : '$3 < 10 {print $1 "\t" $3}'
说明: $3 变量是空值,但是后面与之作比较的是整数,所以 $3 的值是 0 ,满足条件,所以打印 $1 的结果,在此打印 $3 的结果时 $3 是空串。
其他运算符
awk 还支持其他的一些运算符,例如正号 + 、负号 - 、自增 ++ 以及自减 -- 等,这些运算符的使用方法与其他
的语言的使用方法完全相同。