Почему 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