Как найти уникальные строки и удалить все дубликаты из файла? Мой входной файл
1
1
2
3
5
5
7
7
Я бы хотел, чтобы результат был:
2
3
sort file | uniq
не будет работать. Покажет все значения 1 раз
Как найти уникальные строки и удалить все дубликаты из файла? Мой входной файл
1
1
2
3
5
5
7
7
Я бы хотел, чтобы результат был:
2
3
sort file | uniq
не будет работать. Покажет все значения 1 раз
sort file | uniq
показывает все значения 1 раз, потому что он сразу же печатает строку, с которой сталкивается в первый раз, а для последующих встреч просто пропускает их.
Ответы:
uniq
есть вариант, который вам нужен:
-u, --unique
only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
Используйте следующим образом:
sort < filea | uniq > fileb
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 он уже есть):
#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
uniq -u < file
сделаю свою работу.
uniq
должен работать нормально, если ваш файл / может быть отсортирован, если вы не можете отсортировать файл по какой-то причине, вы можете использовать awk
:
awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
sort -d "file name" | uniq -u
это сработало для меня для аналогичного. Используйте это, если это не устроено. Вы можете удалить сортировку, если она организована
Мне так легче.
sort -u input_filename > output_filename
-u
означает уникальный.
Это был первый я пробовал
skilla:~# uniq -u all.sorted
76679787
76679787
76794979
76794979
76869286
76869286
......
После выполнения cat -e all.sorted
skilla:~# cat -e all.sorted
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $
Каждая вторая строка имеет конечный пробел :( После удаления всех конечных пробелов все заработало!
Спасибо
sort file | uniq -u
выведет за вас на консоль.