我在文件 /tmp/users 中有用户列表(每个列表包含不同的用户)
例子
more /tmp/users
root
kafka
yarn
hdfs
root
root
yarn
moon
apache
start
moon
apache
我想打印文件中出现的用户/tmp/用户并将它们计为以下
预期成绩
apache - 2
Hdfs - 1
Kafka - 1
Moon - 2
Root - 3
Start - 1
Yarn - 2
答案1
您可以通过此管道获得此结果,但这可能不是最同质的方法:
sort /tmp/users | uniq -c | awk '{print $2 " - " $1;}'
sort
对输入进行排序,以便uniq
可以处理条目。它们需要被分类。最后awk
产生最终报告,这是一个整容手术。 (比较没有它的输出。)
另外,如果输入包含空行,您可能需要跳过它们。perl
派上用场:
perl -lne 'print unless /^\s*$/' in | sort | uniq -c | awk '{print $2 " - " $1;}'
这也是一个同质的 Perl one liner:
perl -lne '($s)=/(\S+)/; $a{$s}++ if $s; END {print "$_ - $a{$_}" for (sort keys %a)}' /tmp/users