如何根据它的出现次数对每一行进行排序?

时间:2014-09-20 02:00:22

标签: bash

假设我有一个非常大的文件包含许多文本行:

aa
bb
cc
aa
cc
dd
dd
cc
cc
dd

我们可以看到aa显示两次,bb显示一次,cc显示四次,dd显示三次。

我希望通过出现次数排序这些行:

cc
dd
aa
bb

我可以使用bash吗?

3 个答案:

答案 0 :(得分:4)

以下是可以直接在命令行上运行的几个选项:

$ cat file
aa
bb
cc
aa
cc
dd
dd
cc
cc
dd

命令行工具:

$ sort file | uniq -c | sort -nrk2 | awk '$0=$2'
cc
dd
aa
bb

GNU awk

$ gawk 'BEGIN{PROCINFO["sorted_in"]="@val_num_desc"}{a[$0]++}END{for(x in a) print x}' file
cc
dd
aa
bb

perl

$ perl -lne '$h{$_}++ }{ print $_ for sort { $h{$b} <=> $h{$a} } keys %h' file
cc
dd
aa
bb

答案 1 :(得分:1)

当然!使用uniq工具。它可以检测和计算看起来相同的线条等。

尝试:

cat file | sort | uniq --count

需要拨打sort,因为uniq仅考虑相邻行sort将所有相等的行放在相邻位置,为uniq做准备。

要按计数对结果进行排序,请将上述命令再次传送到sort -n

答案 2 :(得分:1)

......或:

sort file | uniq -c | sort -r | cut -c9-

...假设输入数据在文件file中。