|
和 C 语言一样,awk 也有运算符,且分两种,一种是单目运算符,一种是双目运算符。
单目运算符
双目运算符中的数学运算符:
运算符 | 描述 | + | 加 | - | 减 | * | 乘 | / | 除 | % | 求模 |
双目运算符中的赋值运算符:
运算符 | 描述
| = | 直接赋值 | += | 加后赋值 | -= | 减后赋值 | *= | 乘后赋值 | /= | 除后赋值 | %= | 求模后赋值 |
双目运算符中的条件运算符:
运算符 | 描述
| > | 大于 | >= | 大于等于 | < | 小于 | <= | 小于等于 | == | 等于 | != | 不等 | && | 与 | || | 或 |
正则表达式运算符:
下面是几个实例:
1. 计算 /etc/passwd 文件中所有域的个数:$ awk -F ':' '{total += NF}; END {print total}' /etc/passwd
287
2. 从 /etc/passwd 里计算出有多少用户使用的是 /bin/bash :$ awk -F ':' '$NF ~ /\/bin\/bash/ {total++;} END {print total}' /etc/passwd
3 当然这里只是演示了 awk 的用法,获取方法还有很多,比如:$ cat /etc/passwd |grep /bin/bash |wc -l
3. 从 /etc/passwd 里找出 UID 值最大的用户:$ awk -F ':' '$3 > max { max = $3; maxline = $0; } END {print max, maxline}' /etc/passwd
65534 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
4. 列出 /etc/passwd 里行号为偶数的行并打印出该行及其行号:$ awk 'NR % 2 == 0 {print NR,$0}' /etc/passwd
2 bin:x:1:1:bin:/bin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
8 halt:x:7:0:halt:/sbin:/sbin/halt
... ...36 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
38 tcpdump:x:72:72::/:/sbin/nologin
40 mockbuild:x:501:501::/home/mockbuild:/bin/bash
5. 列出 /etc/passwd 里 UID 和 GID 相等的行:$ awk -F ':' '$3 == $4' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
... ...
mockbuild:x:501:501::/home/mockbuild:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
6. 找出 /etc/passwd 中 UID 大于 300 且在用 /bin/bash 的用户记录:$ awk -F ':' '$3 >= 300 && $NF ~ /\/bin\/bash/' /etc/passwd
beyes:x:500:500:beyes:/home/beyes:/bin/bash
mockbuild:x:501:501::/home/mockbuild:/bin/bash
7. 列出 /etc/passwd 中没有注释信息(第 5 列)的用户信息:$ awk -F ':' '$5 == "" ' /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
mockbuild:x:501:501::/home/mockbuild:/bin/bash |
|