采用awk工具,分别统计管理员个数,普通用户个数及系统用户个数。
时间: 2023-08-02 13:07:44 浏览: 46
假设管理员账号以"admin"开头,系统用户账号以"sys"开头,其他账号均为普通用户,可以使用以下命令:
```
awk -F: '{if($1 ~ /^admin/) admin++ else if($1 ~ /^sys/) sys++ else normal++} END{print "管理员个数:", admin, "\n普通用户个数:", normal, "\n系统用户个数:", sys}' /etc/passwd
```
解释一下命令:
- `-F:` 指定分隔符为冒号,因为/etc/passwd文件中各字段之间都是用冒号分隔的。
- `if($1 ~ /^admin/) admin++` 判断账号是否以"admin"开头,如果是,则管理员个数加1。
- `else if($1 ~ /^sys/) sys++` 判断账号是否以"sys"开头,如果是,则系统用户个数加1。
- `else normal++` 如果以上两个条件都不满足,则是普通用户,普通用户个数加1。
- `END{print "管理员个数:", admin, "\n普通用户个数:", normal, "\n系统用户个数:", sys}` 在处理完所有行后,输出各种用户的个数。
相关问题
使用awk工具,分别统计管理员个数,普通用户个数及系统用户个数
假设管理员账号以"admin"开头,系统账号以"sys"开头,其他账号为普通用户。可以使用以下命令:
统计管理员个数:
```
awk -F: '$1 ~ /^admin/ {count++} END {print count}' /etc/passwd
```
统计普通用户个数:
```
awk -F: '$1 !~ /^(admin|sys)/ && $3 >= 1000 {count++} END {print count}' /etc/passwd
```
统计系统用户个数:
```
awk -F: '$1 ~ /^sys/ {count++} END {print count}' /etc/passwd
```
解释一下:
- `-F:` 指定分隔符为冒号,因为passwd文件的格式是以冒号分隔的。
- `$1 ~ /^admin/` 表示匹配用户名以"admin"开头的行。
- `$1 !~ /^(admin|sys)/ && $3 >= 1000` 表示匹配用户名不以"admin"或"sys"开头且UID大于等于1000的行。
- `$1 ~ /^sys/` 表示匹配用户名以"sys"开头的行。
- `{count++}` 表示计数器加1。
- `END {print count}` 表示输出最终的计数器值。
用awk命令统计/etc/passwd中每个shell的用户数
可以使用awk命令和管道操作符来实现该功能。具体步骤如下:
1. 使用cat命令读取/etc/passwd文件,并将结果通过管道操作符传递给awk命令。
2. 在awk命令中,使用":"作为分隔符,将每行切分成多个字段。
3. 使用$7表示每行的第七个字段,即shell字段。
4. 使用数组保存每个shell出现的次数。
5. 在END块中,遍历数组,输出每个shell及其对应的用户数。
具体命令如下:
```
cat /etc/passwd | awk -F: '{shell[$7]++} END {for (s in shell) print s, shell[s]}'
```
输出结果类似于:
```
/bin/bash 10
/sbin/nologin 2
/bin/sh 1
```