Файл необходимо сначала отсортировать. sort file | uniq -uвыведет за вас на консоль.
ma77c
Я думаю, что причина sort file | uniqпоказывает все значения 1 раз, потому что он сразу же печатает строку, с которой сталкивается в первый раз, а для последующих встреч просто пропускает их.
Это неверно, я думаю, вы имели в виду:uniq -u filea > fileb
Крис Сеймур
1
Я скопировать данные и запустить его и он работает: sort<filea.txt | uniq>fileb.txt. Возможно, вы не учли расширения. Я использую Mac OS X. Вам нужно перейти с filea.txtдругого на другойfileb.txt
kasavbere
Там нет необходимости в перенаправлении с sortи что точка трубопровода , чтобы , uniqкогда вы могли бы просто сделать sort -u file -o fileто , что вы делаете , это удалить повторяющиеся значения , то есть ваши filebсодержит 1,2,3,5,7ОП хочет только уникальные линии, является 2,3и достигается путем uniq -u fileрасширения файла не имеет ничего с этим, ваш ответ неверен.
Крис Сеймур
12
Вы также можете распечатать уникальное значение в «файле» с помощью catкоманды, подключившись к sortиuniq
uniq -u сводил меня с ума, потому что он не работал.
Итак, вместо этого, если у вас есть python (в большинстве дистрибутивов и серверов Linux он уже есть):
Предполагая, что у вас есть файл данных в notUnique.txt
#Python
#Assuming file has data on different lines
#Otherwise fix split() accordingly.
uniqueData = []
fileData = open('notUnique.txt').read().split('\n')
for i in fileData:
if i.strip()!='':
uniqueData.append(i)
print uniqueData
###Another option (less keystrokes):
set(open('notUnique.txt').read().split('\n'))
Обратите внимание, что из-за пустых строк окончательный набор может содержать строки «» или только пробелы. Вы можете удалить это позже. Или просто уйти от копирования с терминала;)
#
Просто к сведению, со страницы uniq Man:
«Примечание. 'Uniq' не обнаруживает повторяющиеся строки, если они не являются смежными. Вы можете сначала отсортировать ввод или использовать 'sort -u' без 'uniq'. Кроме того, при сравнении соблюдаются правила, указанные в 'LC_COLLATE'».
Один из правильных способов вызова: # sort nonUnique.txt | уникальный
Пример выполнения:
$ cat x
3
1
2
2
2
3
1
3
$ uniq x
3
1
2
3
1
3
$ uniq -u x
3
1
3
1
3
$ sort x | uniq
1
2
3
Пробелы могут быть напечатаны, так что будьте готовы!
Хотя sortзанимает время O (n log (n)), я предпочитаю использовать
awk '!seen[$0]++'
awk '!seen[$0]++'является сокращением для awk '!seen[$0]++ {print}'строки печати (= $ 0), если seen[$0]не равно нулю. Это займет больше места, но только O (n) времени.
uniqдолжен работать нормально, если ваш файл / может быть отсортирован, если вы не можете отсортировать файл по какой-то причине, вы можете использовать awk:
sort file | uniq -u
выведет за вас на консоль.sort file | uniq
показывает все значения 1 раз, потому что он сразу же печатает строку, с которой сталкивается в первый раз, а для последующих встреч просто пропускает их.Ответы:
uniq
есть вариант, который вам нужен:источник
Используйте следующим образом:
источник
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt
. Возможно, вы не учли расширения. Я использую Mac OS X. Вам нужно перейти сfilea.txt
другого на другойfileb.txt
sort
и что точка трубопровода , чтобы ,uniq
когда вы могли бы просто сделатьsort -u file -o file
то , что вы делаете , это удалить повторяющиеся значения , то есть вашиfileb
содержит1,2,3,5,7
ОП хочет только уникальные линии, является2,3
и достигается путемuniq -u file
расширения файла не имеет ничего с этим, ваш ответ неверен.Вы также можете распечатать уникальное значение в «файле» с помощью
cat
команды, подключившись кsort
иuniq
cat file | sort | uniq -u
источник
uniq -u сводил меня с ума, потому что он не работал.
Итак, вместо этого, если у вас есть python (в большинстве дистрибутивов и серверов Linux он уже есть):
Предполагая, что у вас есть файл данных в notUnique.txt
Обратите внимание, что из-за пустых строк окончательный набор может содержать строки «» или только пробелы. Вы можете удалить это позже. Или просто уйти от копирования с терминала;)
#Просто к сведению, со страницы uniq Man:
«Примечание. 'Uniq' не обнаруживает повторяющиеся строки, если они не являются смежными. Вы можете сначала отсортировать ввод или использовать 'sort -u' без 'uniq'. Кроме того, при сравнении соблюдаются правила, указанные в 'LC_COLLATE'».
Один из правильных способов вызова: # sort nonUnique.txt | уникальный
Пример выполнения:
Пробелы могут быть напечатаны, так что будьте готовы!
источник
Хотя
sort
занимает время O (n log (n)), я предпочитаю использоватьawk '!seen[$0]++'
является сокращением дляawk '!seen[$0]++ {print}'
строки печати (= $ 0), еслиseen[$0]
не равно нулю. Это займет больше места, но только O (n) времени.источник
ты можешь использовать:
эти данные сортируются и фильтруются по уникальным значениям
источник
uniq -u < file
сделаю свою работу.источник
uniq
должен работать нормально, если ваш файл / может быть отсортирован, если вы не можете отсортировать файл по какой-то причине, вы можете использоватьawk
:awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
источник
это сработало для меня для аналогичного. Используйте это, если это не устроено. Вы можете удалить сортировку, если она организована
источник
Мне так легче.
-u
означает уникальный.источник
Это был первый я пробовал
После выполнения cat -e all.sorted
Каждая вторая строка имеет конечный пробел :( После удаления всех конечных пробелов все заработало!
Спасибо
источник