采用awk工具,分别统计管理员个数,普通用户个数及系统用户个数。
时间: 2023-08-02 17:12:09 浏览: 49
假设管理员的用户名以"admin"开头,系统用户的用户名以"sys"开头,其他用户为普通用户,可以使用以下命令来统计:
```
awk -F: '{if($1 ~ /^admin/) admin++ else if($1 ~ /^sys/) sys++ else user++} END {print "管理员个数:"admin; print "普通用户个数:"user; print "系统用户个数:"sys}' /etc/passwd
```
解释一下命令:
1. `-F:` 表示以冒号为分隔符,将每行数据分割成多个字段。
2. `$1` 表示第一个字段,即用户名。
3. `if($1 ~ /^admin/)` 表示如果用户名以"admin"开头,则`admin++`,即管理员个数加1。
4. `else if($1 ~ /^sys/)` 同理,如果用户名以"sys"开头,则`sys++`,即系统用户个数加1。
5. `else user++` 表示如果用户名不是以"admin"或"sys"开头,则认为是普通用户,`user++`,即普通用户个数加1。
6. `END` 表示在处理完所有行后执行。
7. `{print "管理员个数:"admin; print "普通用户个数:"user; print "系统用户个数:"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
```