• 本页内容

67. 比较运算符


Awk 支持下面列出的标准比较运算符。

操作符 描述
> 大于
>= 大于等于
< 小于
<= 小于等于
== 相等
!= 不相等
&& 两个条件表达式都为 true
```

关于以下示例的说明:如果不指定任何操作,则 awk 将打印与条件比较匹配的整个记录。

以下示例使用<=条件。 这将显示关键库存水平 5 以下的所有项目:

$ awk -F "," '$5 <= 5' items.txt
102,Refrigerator,Appliance,850,2
105,Laser Printer,Office,475,5

以下示例使用==条件。 这将显示项目编号为 103 的记录:

$ awk -F "," '$1 == 103' items.txt
103,MP3 Player,Audio,270,15

注意:不要将==(完全相等)运算符与 =(赋值)混淆。

仅打印编号为 103 的项目的描述:

$ awk -F "," '$1 == 103 {print $2}' items.txt
MP3 Player

以下示例使用!=条件。 这将打印除视频类别中的项目之外的所有项目:

$ awk -F "," '$3 != "Video"' items.txt
102,Refrigerator,Appliance,850,2
103,MP3 Player,Audio,270,15
104,Tennis Racket,Sports,190,20
105,Laser Printer,Office,475,5

以下示例使用&&AND 运算符)检查两个条件。 这将打印成本低于 900 并且数量小于或等于关键库存水平 5 的记录。

$ awk -F "," '$4 < 900 && $5 <= 5' items.txt
102,Refrigerator,Appliance,850,2
105,Laser Printer,Office,475,5

与上面相同,但仅打印项目描述:

$ awk -F "," '$4 < 900 && $5 <= 5 {print $2}' items.txt
Refrigerator
Laser Printer

以下示例使用||OR 运算符)检查两个条件。 这将打印成本低于 900 或数量等于或低于关键库存水平 5 的记录。

$ awk -F "," '$4 < 900 || $5 <= 5' items.txt
101,HD Camcorder,Video,210,10
102,Refrigerator,Appliance,850,2
103,MP3 Player,Audio,270,15
104,Tennis Racket,Sports,190,20
105,Laser Printer,Office,475,5

与上面相同。 但仅打印项目描述:

$ awk -F "," '$4 < 900 || $5 <= 5 {print $2}' items.txt
HD Camcorder
Refrigerator
MP3 Player
Tennis Racket
Laser Printer

以下示例使用>(大于)条件。 此示例显示/etc/passwd中具有最高用户 ID 值的 uid(和整行)。 该 awk 脚本跟踪变量 "maxuid" 中的最大数字(field3),并在变量 "maxline" 中保留相应行的副本。 一旦它循环完所有行,它就会打印 uid 和行。

$ awk -F ':' '$3 > maxuid { maxuid=$3; maxline=$0 }; END { print maxuid, maxline }' /etc/passwd
112 gdm:x:112:119:Gnome Display
Manager:/var/lib/gdm:/bin/false

以下示例使用==条件。此示例打印/etc/passwd文件中具有相同用户 ID 和组 ID 的每一行。 仅当 $3(用户 ID)和 $4(组 ID)相等时,此 awk 脚本才会打印该行。

$ awk -F ':' '$3==$4' /etc/passwd
gnats:x:41:41:Gnats Bug-Reporting System
(admin):/var/lib/gnats:/bin/sh

以下示例使用>=&&条件。 此示例打印/etc/passwdUSER ID >= 100 并且用户的 shell 为 /bin/sh 的任何行。

$ awk -F ':' '$3>=100 && $NF ~ /\/bin\/sh/' /etc/passwd
libuuid:x:100:101::/var/lib/libuuid:/bin/sh

以下示例使用==条件。 此示例打印/etc/passwd中没有注释的所有行(字段 5)。

$ awk -F ':' '$5 == "" ' /etc/passwd
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:102::/home/syslog:/bin/false
saned:x:110:116::/home/saned:/bin/false