为什么uniq在这个大文件上工作? 庆典

我真的很抱歉,这个其他的noob问题,但我真的不知道这里发生了什么。 我想从文件中计算单词的频率,单词是逐行的。 该文件真的很大,所以这可能是问题(在这个例子中,它是30万行)

我做这个命令:

cat .temp_occ | uniq -c | sort -k1,1nr -k2 > distribution.txt 

问题是它给了我一个小错误:它认为我是相同的词不同。 例如,第一个条目是:

 306 continua 278 apertura 211 eventi 189 murah 182 giochi 167 giochi 

你可以看到giochi重复了两次

在文件的底部,它变得更糟,它看起来像这样:

  1 win 1 win 1 win 1 win 1 win 1 win 1 win 1 win 1 win 1 winchester 1 wind 1 wind 

所有的话

我真的很抱歉这个愚蠢的问题,但我有点shell编程。 我究竟做错了什么?

非常感谢

Solutions Collecting From Web of "为什么uniq在这个大文件上工作? 庆典"

尝试先排序:

 cat .temp_occ | sort| uniq -c | sort -k1,1nr -k2 > distribution.txt 

或使用“排序-u”,这也消除了重复。 看到这里 。

文件的大小与你所看到的没有任何关系。 从uniq(1)的手册页 :

注意:'uniq'不检测重复行,除非它们相邻。 您可能需要首先对输入进行排序,或使用“sort -u”而不使用“uniq”。 此外,比较还遵守“LC_COLLATE”指定的规则

所以运行uniq

 a b a 

将返回:

 a b a 

是否有可能有一些词有空格字符? 如果是这样,你应该删除它们使用这样的事情:

 cat .temp_occ | tr -d ' ' | uniq -c | sort -k1,1nr -k2 > distribution.txt