Как найти уникальные строки и удалить все дубликаты из файла? Мой входной файл
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 раз
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 заставлял меня сходить с ума, потому что это не сработало.
Поэтому вместо этого, если у вас есть 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'))
Просто FYI, На странице Uniq Man:
"Примечание:" uniq "не обнаруживает повторяющиеся строки, если они не смежны. Вы можете сначала отсортировать вход или использовать" sort -u "без" uniq ". Кроме того, сравнения соблюдают правила, указанные в" LC_COLLATE "" ".
Один из правильных способов: # сортировать nonUnique.txt | Uniq
$ 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}'
Вы также можете распечатать уникальное значение в "файле", используя команду cat
отправив pip для sort
и uniq
cat file | sort | uniq -u
sort -d "file name" | uniq -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
занимает O (n log (n)) времени, я предпочитаю использовать
awk '!seen[$0]++'
awk '!seen[$0]++'
- это сокращение от awk '!seen[$0]++ {print}'
, строка печати (= $ 0), если seen[$0]
, не равна нулю. Это займет больше места, но только O (N) время.
ты можешь использовать:
sort data.txt| uniq -u
сортировать данные и фильтровать по уникальным значениям