`uniq` не работает должным образом

У меня есть файл с именем "test.txt", который выглядит так:

10
10
10
8
10
9
10
10
9
10
8

По какой-то причине, когда я запустил uniq test.txt, я получил такой вывод:

10
8
10
9
10
9
10
8

Почему я получаю этот вывод? Я использую BSD uniq. В программе есть какой-то баг?


person lutaoact    schedule 08.10.2014    source источник


Ответы (1)


Я не эксперт, но я уверен, что uniq сравнивает только соседние строки. Мне не нужно использовать его слишком часто, но при запуске man uniq в моей системе я получаю:

Утилита uniq читает указанный входной_файл, сравнивая соседние строки, и записывает копию каждой уникальной входной строки в выходной_файл. Если input_file представляет собой одиночный дефис (`-') или отсутствует, читается стандартный ввод. Если output_file отсутствует, для вывода используется стандартный вывод. Вторая и последующие копии идентичных смежных входных строк не записываются. Повторяющиеся строки во входных данных не будут обнаружены, если они не являются смежными, поэтому может потребоваться сначала отсортировать файлы.

Поэтому они должны быть рядом, чтобы их можно было обнаружить. Отсюда и повторные отчеты. Они отличаются от соседних строк, и это все, что на самом деле проверяет uniq.

Надеюсь, это поможет. Позвольте мне знать, если я что-то пропустил, мне на самом деле тоже любопытно.

person Stephen Lazaro    schedule 08.10.2014
comment
Это именно так: uniq имеет в качестве предварительного условия, что ввод отсортирован (или он сделает что-то немного отличное от того, что написано на жестяной банке). Вот почему вместо этого часто используется sort -u — он выполняет оба шага в одном процессе. - person John Zwinck; 08.10.2014
comment
uniq сравнивает только соседние строки. Это правило. Вместо этого я использую sort -u. - person lutaoact; 08.10.2014