У меня есть текстовый файл, содержащий такие строки:
This is a thread 139737522087680
This is a thread 139737513694976
This is a thread 139737505302272
This is a thread 139737312270080
.
.
.
This is a thread 139737203164928
This is a thread 139737194772224
This is a thread 139737186379520
Как я могу быть уверен в уникальности каждой строки?
ПРИМЕЧАНИЕ . Цель состоит в том, чтобы протестировать файл, а не изменять его, если присутствуют повторяющиеся строки.
Ответы:
источник
uniq
вместоsort -u
uniq
будет большая ошибка; он только дедуплицирует соседние строки!sort <file> | uniq -d
он напечатает дубликаты.Awk решение:
источник
echo
вEND
?&& echo
или|| echo
является соглашением в ответах, указывающим, что команда правильно поступает с кодом состояния выхода. Важной вещью являетсяexit(1)
. В идеале, вы бы использовали это какif has_only_unique_lines file; then ...
, нетif [[ $(has_only_unique_lines file) = "no dupes" ]]; then ...
, это было бы глупо.sort
будет использоваться воля, независимо от того, есть ли дубли или нет, верно? Как это экономит память?Используя
sort
/uniq
:Для проверки только на наличие дублирующих строк используйте
-d
опцию uniq. Это покажет только дубликаты строк, если нет, то ничего не будет показано:источник
TLDR
Первоначальный вопрос был неясен, и прочитал, что OP просто хотел уникальную версию содержимого файла. Это показано ниже. В обновленной форме вопроса ОП теперь заявляет, что он / она просто хочет знать, является ли содержимое файла уникальным или нет.
Проверьте, является ли содержимое файла уникальным или нет
Вы можете просто использовать,
sort
чтобы проверить, является ли файл уникальным или содержит дубликаты, например:пример
Скажем, у меня есть эти два файла:
дубликат файла образца уникальный образец файлаТеперь, когда мы анализируем эти файлы, мы можем сказать, являются ли они уникальными или содержат дубликаты:
файл тестовых дубликатов проверить уникальный файлОригинальный вопрос (уникальное содержимое файла)
Может быть сделано только с
sort
:источник
Я обычно делаю
sort
файл, затем используюuniq
для подсчета количества дубликатов, затемsort
еще раз вижу дубликаты внизу списка.Я добавил один дубликат к предоставленным вами примерам:
Поскольку я
uniq
некоторое время не читал справочную страницу , я быстро рассмотрел любые альтернативы. Следующее устраняет необходимость во второй сортировке, если вы просто хотите увидеть дубликаты:источник
Если дубликатов нет, все строки уникальны:
Описание: Сортировка строк файла, чтобы сделать повторяющиеся строки подряд (sort)
Извлечь все последовательные строки, которые равны (uniq -d).
Если есть какой-либо вывод команды выше (
[...]
), то (&&
) выведите сообщение.источник
Это не будет полным без ответа Perl!
Это напечатает каждую неуникальную строку один раз: поэтому, если она ничего не печатает, то в файле есть все уникальные строки.
источник
Использование
cmp
иsort
вbash
:или
Это будет отсортировать файл дважды, как и принятый ответ.
источник