Почему Uniq не работает с этим большим файлом? удар

Мне очень жаль за этот другой вопрос, но я не могу понять, что здесь происходит. Я хочу вычислить частоту слов из файла, где слова расположены по одной строке. Файл действительно большой, так что это может быть проблемой (в этом примере он насчитывает 300 тыс. Строк)

Я делаю эту команду:

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 

для всех слов

Мне очень жаль снова за этот глупый вопрос, но я вроде нуб с программированием оболочки. Что я делаю неправильно?

большое спасибо

4 ответа

Решение

Попробуйте сначала отсортировать:

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

Или используйте "sort -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
Другие вопросы по тегам