Linux 打印和排序输出的替代方法

Linux 打印和排序输出的替代方法,linux,bash,awk,Linux,Bash,Awk,我有一份名单和分数(第一、最后、分数) 我试着只打印出最常以数字降序出现的姓氏 下面是一个示例列表 inisha__Ohler__1 Loralee__Hippe__5 Boyd__Leslie__8 Donnette__Cosentino__5 Viva__Bedsole__4 Jann__Banfield__3 Alan__Dionne__2 Sandee__Verdun__2 Raeann__Sweetman__3 Judson__Goers__2 Mandie__Salcedo__8 Y

我有一份名单和分数(第一、最后、分数)

我试着只打印出最常以数字降序出现的姓氏

下面是一个示例列表

inisha__Ohler__1
Loralee__Hippe__5
Boyd__Leslie__8
Donnette__Cosentino__5
Viva__Bedsole__4
Jann__Banfield__3
Alan__Dionne__2
Sandee__Verdun__2
Raeann__Sweetman__3
Judson__Goers__2
Mandie__Salcedo__8
Yesenia__Bibeau__1
Doug__Petteway__9
Alejandra__Winter__9
Marquitta__Sang__7
Rusty__Rodrigue__2
Rickie__Devin__1
Marie__Elem__3
Faustina__Haltom__4
Dorthea__Ervin__4
Yesenia__Bibeau__5
Doug__Petteway__8
Alejandra__Winter__1
Marquitta__Sang__9
Rusty__Rodrigue__4
Yesenia__Bibeau__2
Doug__Petteway__4
Alejandra__Winter__3
Marquitta__Sang__6
Rusty__Rodrigue__6
Rickie__Devin__7
Marie__Elem__1
Faustina__Haltom__2
Dorthea__Ervin__4
我想使用一个或更少的“|”来输出输出

cut -d "_" -f 3 scores | sort -r | uniq -c | sort -nr

已经可以工作了,但我正在寻找更便宜的东西。

我认为实现这一点最便宜的方法是使用
awk
和排序,如下所示:

awk -F"__" '{ count[$2]++ } END {for (word in count) print count[word], word}' < scores | sort -r
GNU awk特定:

$ gawk -F__ '{ names[$2]++ }
             END { PROCINFO["sorted_in"] = "@val_num_desc";
                   for (n in names) { print n }
             }' input.txt
Sang
etc.

使用这个perl一行程序

perl -aF/__/ -ne '$h{$F[1]}++; END{ print"$$_[0]\t$$_[1]\n" for sort {$$b[0]<=>$$a[0]} map {[$h{$_},$_]} keys %h }' <scores

perl-aF/_/-ne'$h{$F[1]}++;结束{print“$$$\[0]\t$$$\[1]\n”用于排序{$$b[0]$$a[0]}映射{[$h{$\},$$\]}键%h}您可以在第一次
排序时使用
-t}-k1
,并消除管道的
剪切部分。祝你好运
perl -aF/__/ -ne '$h{$F[1]}++; END{ print"$$_[0]\t$$_[1]\n" for sort {$$b[0]<=>$$a[0]} map {[$h{$_},$_]} keys %h }' <scores
perl -MList::Util=max -aF/__/ -ne '$h{$F[1]}++; END{ $max=max(values%h); print "$h{$_}\t$_\n" for grep {$h{$_}==$max} keys%h }' <scores