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/passwd
中 USER 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