Вы можете получить это с помощью этого конвейера, который, возможно, не является самым однородным подходом:
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:
perl -lne '($s)=/(\S+)/; $a{$s}++ if $s; END {print "$_ - $a{$_}" for (sort keys %a)}' /tmp/users