【问题标题】:Why does "uniq" count identical words as different?为什么“uniq”将相同的词视为不同的词?
【发布时间】:2012-08-08 08:20:40
【问题描述】:

我想计算文件中单词的频率,其中单词是一行一行的。该文件非常大,所以这可能是问题所在(在此示例中它计为 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 

所有单词。

我做错了什么?

【问题讨论】:

    标签: linux bash shell uniq


    【解决方案1】:

    尝试先排序:

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

    【讨论】:

    • 我觉得自己很愚蠢,非常感谢,再次为这个菜鸟问题感到抱歉
    【解决方案2】:

    或者使用“sort -u”也可以消除重复。见here

    【讨论】:

      【解决方案3】:

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

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

      所以运行uniq

      a
      b
      a
      

      将返回:

      a
      b
      a
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 不,我在发帖之前已经检查过了。这也是我的想法,但是所有单词中的空格都是相同的。在 uniq 之前使用 sort 的解决方案也很有魅力。感谢您的帮助:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-01
        相关资源
        最近更新 更多