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

Bash 如何根据每行的出现次数对其进行排序?,bash,Bash,假设我有一个非常大的文件,其中包含许多行文本: aa bb cc aa cc dd dd cc cc dd 我们可以看到aa出现两次,bb出现一次,cc出现四次,dd出现三次 我希望按发生次数对这些行进行排序: cc dd aa bb 我可以用bash做这个吗?当然可以!使用uniq工具。除其他外,它检测并统计看起来相同的线条 尝试: 需要调用sort,因为uniq只考虑相邻的行。sort将所有相等的行置于相邻位置,为uniq铺平道路 要按计数对结果进行排序,请将上述命令再次导入sort-n

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

aa
bb
cc
aa
cc
dd
dd
cc
cc
dd
我们可以看到aa出现两次,bb出现一次,cc出现四次,dd出现三次

我希望按发生次数对这些行进行排序:

cc
dd
aa
bb
我可以用bash做这个吗?

当然可以!使用uniq工具。除其他外,它检测并统计看起来相同的线条

尝试:

需要调用sort,因为uniq只考虑相邻的行。sort将所有相等的行置于相邻位置,为uniq铺平道路

要按计数对结果进行排序,请将上述命令再次导入sort-n。

当然!使用uniq工具。除其他外,它检测并统计看起来相同的线条

尝试:

需要调用sort,因为uniq只考虑相邻的行。sort将所有相等的行置于相邻位置,为uniq铺平道路

要按计数对结果进行排序,请将上述命令再次导入sort-n.

。。。或:

sort file | uniq -c | sort -r | cut -c9-
。。。假设输入数据在文件中。

。。。或:

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

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

这里还有几个选项可以直接在命令行上运行:

$ cat file
aa
bb
cc
aa
cc
dd
dd
cc
cc
dd
命令行工具: GNU awk: perl:
下面是几个可以直接在命令行上运行的选项:

$ cat file
aa
bb
cc
aa
cc
dd
dd
cc
cc
dd
命令行工具: GNU awk: perl:
$ gawk 'BEGIN{PROCINFO["sorted_in"]="@val_num_desc"}{a[$0]++}END{for(x in a) print x}' file
cc
dd
aa
bb
$ perl -lne '$h{$_}++ }{ print $_ for sort { $h{$b} <=> $h{$a} } keys %h' file
cc
dd
aa
bb