[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
还支持其他的一些运算符,例如正号
+
、负号
-
、自增
++
以及自减
--
等,这些运算符的使用方法与其他
的语言的使用方法完全相同。