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

标签 linux bash awk

我有一个名字和分数的列表(First,Last,Score)

我试图只打印出按数字降序排列最常出现的姓氏。

这是一个示例列表。

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

如果你也想要这三个空格就像 uniq -c 提供给你的那样,

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

关于linux - 打印和排序输出的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57096137/

相关文章:

linux - Cabal 无法在 Linux 上安装 network-2.6.3.1

linux - 运行 Vagrant SSH 会导致 BASH 循环提前终止

awk 打印文件中每一行和下一行的字段

regex - 在 BASH 中的字符串末尾前插入一个字符 4 个字符

bash - 在一个 bash 变量中传递包含空格的多个 jvm 参数

bash - 从 Shell 脚本变量中提取定界符之间的数据

perl - 如果 csv 文件可以在引用的字符串中用逗号引用,那么将 csv 文件转换为 tsv 文件的平台独立方法是什么?

linux - 如何在 linux 上运行 aout?

arrays - 从 perl 中的其他数组中 grep 一个数组

c - 标题 <linux/in.h> 和 <netinet/in.h> 之间的实际区别是什么?