awk + ​​对文件中的字符串进行计数

awk + ​​对文件中的字符串进行计数

我在文件 /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

相关内容