为什么uniq不能处理这个大文件?庆典

时间:2012-08-08 08:20:40

标签: linux bash shell uniq

我真的很抱歉这个其他的菜鸟问题,但我无法弄清楚这里发生了什么。我想计算文件中单词的频率,其中单词是逐行的。该文件非常大,所以这可能是问题(在这个例子中它计算了300k行)

我执行此命令:

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编程很有帮助。 我做错了什么?

非常感谢

4 个答案:

答案 0 :(得分:13)

首先尝试排序:

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

答案 1 :(得分:6)

或使用“sort -u”也可以消除重复。请参阅here

答案 2 :(得分:2)

文件的大小与您所看到的无关。 From the man page of uniq(1)

  

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

上运行uniq
a
b
a

将返回:

a
b
a

答案 3 :(得分:1)

是否有可能某些单词后面有空格字符?如果是这样,你应该使用以下内容删除它们:

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