6 个强大的 Awk 运算符示例
与任何其他编程语言一样,Awk 也有许多用于数字和字符串操作的运算符。在本文中,让我们讨论所有关键的awk 运算符。
awk 中有两种类型的运算符。
- 一元运算符——接受单个操作数的运算符称为一元运算符。
- 二元运算符——接受多个操作数的运算符称为二元运算符。
awk 一元运算符
操作 | 描述 |
+ | 正数 |
– | 否定数字 |
++ | 自动递增 |
— | 自动递减 |
awk 二元运算符
在 Awk 中有不同种类的二元运算符可用。它是根据其用途分类的。
awk 算术运算符
以下运算符用于执行算术计算。
操作 | 描述 |
+ | 添加 |
– | 减法 |
* | 乘法 |
/ | 分配 |
% | 模除法 |
awk 字符串运算符
对于字符串连接,Awk 具有以下运算符。
操作 | 描述 |
(space) | 字符串连接 |
awk 赋值运算符
awk 具有赋值运算符和快捷赋值运算符,如下所示。
操作 | 描述 |
= | 任务 |
+= | 快捷键添加赋值 |
-= | 快捷减法赋值 |
*= | 快捷乘法赋值 |
/= | 快捷键分配 |
%= | 快捷键模除法赋值 |
awk 条件运算符
awk 有以下条件运算符列表,可用于控制结构和循环语句,将在下一篇文章中介绍。
操作 | 描述 |
> | 大于 |
>= | 大于或等于 |
< | 小于 |
<= | 小于或等于 |
<= | 小于或等于 |
== | 等于 |
!= | 不等于 |
&& | 两个条件表达式都应该为真 |
|| | 任何一个条件表达式都应该为真 |
awk 正则表达式运算符
操作 | 描述 |
~ | 匹配运算符 |
!~ | 无匹配运算符 |
awk 运算符示例
现在让我们回顾一些使用 awk 运算符的示例。让我们在这些示例中使用 /etc/passwd 作为输入文件。
$ cat /etc/passwd
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:102::/home/syslog:/bin/false
hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
saned:x:110:116::/home/saned:/bin/false
pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false
awk 示例 1:计算文件中的字段总数。
下面的 awk 脚本匹配所有行并使用快捷添加赋值运算符不断添加每行中的字段数。到目前为止看到的字段数保存在一个名为“total”的变量中。处理完输入后,将执行特殊模式“END {…}”,打印字段总数。
$ awk -F ':' '{ total += NF }; END { print total }' /etc/passwd
49
awk 示例 2:计算使用 /bin/sh shell 的用户数
在下面的 awk 脚本中,它匹配包含模式 /bin/sh 的所有行的最后一个字段。正则表达式应该在 //. 所以所有的前斜杠(/)都必须在正则表达式中转义。当一行匹配变量 'n' 时,变量 'n' 会加一。在 END 部分打印 'n' 的值。
$ awk -F ':' '$NF ~ /\/bin\/sh/ { n++ }; END { print n }' /etc/passwd
2
awk 示例 3:查找具有最高 USER ID 的用户详细信息
下面的 awk 脚本跟踪变量“maxuid”中字段中的最大数字,相应的行将存储在变量“maxline”中。一旦它遍历了所有行,它就会将它们打印出来。
$ 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
awk 示例 4:打印偶数行
下面的 awk 脚本处理每一行并检查 NR % 2 ==0 即 NR 是否是 2 的倍数。它执行打印整行的默认操作。
$ awk 'NR % 2 == 0' /etc/passwd
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
awk 示例 5.打印具有相同 USER ID 和 GROUP ID 的每一行
仅当 $3(USER ID) 和 $4(GROUP ID) 相等时,下面的 awk 脚本才会打印该行。它为每一行输入检查此条件,如果匹配,则打印整行。
$awk -F ':' '$3==$4' passwd.txt
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
awk 示例 6:打印 USER ID 大于或等于 100 且必须使用 /bin/sh 的用户详细信息
在下面的 awk 语句中,有两个条件表达式,一个是 User id($3) 大于或等于 100,第二个是最后一个字段应该与 /bin/sh 匹配,'&&' 是仅当以上两者都打印时条件为真。
$ awk -F ':' '$3>=100 && $NF ~ /\/bin\/sh/' passwd.txt
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
- 点赞
- 收藏
- 关注作者
评论(0)