我的/etc/passwd
用户列表的格式如下:
username:password:uid:gid:firstname.lastname, somenumber:/...
目标 :我只想查看名字,然后对它们进行排序,最常见的名字出现在第一个,第二个最常见的出现在第二个等等......
我看到了一些解决方案至于如何执行第二部分,尽管它们与处理文本文件相关,而不是与从地图中读取相关。
对于第一部分,我真的不知道如何处理。我知道有一些解决方案,但不知道如何去做。
答案1
一种方法是:
cut -d: -f5 /etc/passwd | \
sed 's/\..*//' | \
sort -i | \
uniq -ci | \
sort -rn
答案2
使用 awk 并排序将最常见的名称放在第一位:
awk -F: '{sub(/[.].*/, "", $5); a[$5]++} END{for (n in a)print a[n],n}' /etc/passwd | sort -nr
对于不区分大小写的版本:
awk -F: '{sub(/[. ,].*/, "", $5); a[tolower($5)]++} END{for (n in a)print a[n],n}' /etc/passwd | sort -nr
对于那些喜欢将命令分散在多行中的人:
awk -F: '
{
sub(/[.].*/, "", $5)
a[$5]++
}
END{
for (n in a)
print a[n],n
}
' /etc/passwd | sort -nr
怎么运行的
-F:
这使得
:
字段分隔符。sub(/[.].*/, "", $5)
这将从字段 5 中删除第一个句点之后的所有内容。
a[$5]++
该名称出现的次数存储在关联数组中
a
。这会增加计数器的值。对于不区分大小写的版本,它被替换为a[tolower($5)]++
.END{for (n in a)print a[n],n}
这会打印 array 中所有结果的计数和名称
a
。sort -nr
这会按降序对输出进行数字排序。