Linux命令或脚本计算文本文件中的重复行?

如果我有以下内容的文本文件

red apple green apple green apple orange orange orange 

有没有可用于获得以下结果的Linux命令或脚本?

 1 red apple 2 green apple 3 orange 

通过sort发送(将相邻的项目放在一起)然后uniq -c给出计数,即:

 sort filename | uniq -c 

并以sorting顺序(按频率)获取该列表

 sort filename | uniq -c | sort -nr 

几乎相同的borribles',但如果你添加d参数uniq它只显示重复。

 sort filename | uniq -cd | sort -nr 

uniq -c file

并且在文件未被sorting的情况下:

sort file | uniq -c

尝试这个

 cat myfile.txt| sort| uniq 

你可以住在一个按字母sorting的有序列表中:

 echo "red apple > green apple > green apple > orange > orange > orange > " | sort -u 

 green apple orange red apple 

要么

 sort -u FILE 

-u代表唯一性,唯一性只有通过sorting才能达到。

保存顺序的解决scheme:

 echo "red apple green apple green apple orange orange orange " | { old=""; while read line ; do if [[ $line != $old ]]; then echo $line; old=$line; fi ; done } red apple green apple orange 

和一个文件

 cat file | { old="" while read line do if [[ $line != $old ]] then echo $line old=$line fi done } 

最后两个只删除重复,后面立即 – 适合您的例子。

 echo "red apple green apple lila banana green apple " ... 

将打印两个苹果,由香蕉分裂。

 cat <filename> | sort | uniq -c 

为了得到一个计数:

 $> egrep -o '\w+' fruits.txt | sort | uniq -c 3 apple 2 green 1 oragen 2 orange 1 red 

要得到一个分类计数:

 $> egrep -o '\w+' fruits.txt | sort | uniq -c | sort -nk1 1 oragen 1 red 2 green 2 orange 3 apple 

编辑

啊哈,这不是沿着字界,我的坏。 以下是用于全行的命令:

 $> cat fruits.txt | sort | uniq -c | sort -nk1 1 oragen 1 red apple 2 green apple 2 orange