Як я можу знайти унікальні рядки та видалити всі дублікати з файлу? Мій вхідний файл:
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
OP бажає лише унікальні рядки, що є 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'))
Just FYI, зі сторінки Uniq Man:
"Примітка: 'uniq' не виявляє повторюваних рядків, якщо вони не є сусідніми. Ви можете спершу відсортувати введення або використовувати 'sort -u' без 'uniq'. Крім того, порівняння дотримуються правил, визначених" LC_COLLATE "."
Один із правильних способів викликати за допомогою: # sort 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}'
sort -d "file name" | uniq -u
це спрацювало для мене на подібний. Використовуйте це, якщо це не влаштовано. Ви можете видалити сортування, якщо воно організоване
Мені це легше.
sort -u input_filename > output_filename
-u
розшифровується як унікальний.
Це було перше, що я спробував
skilla:~# uniq -u all.sorted
76679787
76679787
76794979
76794979
76869286
76869286
......
Після виконання кота -e all.orted
skilla:~# cat -e all.sorted
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $
Кожен другий рядок має кінцевий простір :( Після видалення всіх кінцевих просторів це спрацювало!
Дякую
sort file | uniq -u
виведе на консоль для вас.