假设我有一个非常大的文件包含许多文本行:
aa
bb
cc
aa
cc
dd
dd
cc
cc
dd
我们可以看到aa
显示两次,bb
显示一次,cc
显示四次,dd
显示三次。
我希望通过出现次数排序这些行:
cc
dd
aa
bb
我可以使用bash吗?
答案 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
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
中。