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