Jak mogę znaleźć unikalne wiersze i usunąć wszystkie duplikaty z pliku? Mój plik wejściowy to
1
1
2
3
5
5
7
7
Chciałbym, aby wynik był:
2
3
sort file | uniq
nie wykona pracy. Pokaże wszystkie wartości 1 raz
Jak mogę znaleźć unikalne wiersze i usunąć wszystkie duplikaty z pliku? Mój plik wejściowy to
1
1
2
3
5
5
7
7
Chciałbym, aby wynik był:
2
3
sort file | uniq
nie wykona pracy. Pokaże wszystkie wartości 1 raz
sort file | uniq
pokazania wszystkich wartości 1 raz jest to, że natychmiast drukuje linię napotkaną za pierwszym razem, a przy kolejnych spotkaniach po prostu je pomija.
Odpowiedzi:
uniq
ma opcję, której potrzebujesz:
-u, --unique
only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
Użyj w następujący sposób:
sort < filea | uniq > fileb
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt
. Może pominąłeś rozszerzenia. Używam Mac OS X. musisz przejść z filea.txt
do innegofileb.txt
sort
i jaki jest sens przekierowania do uniq
którego można po prostu zrobić sort -u file -o file
to, co robisz, to usunięcie zduplikowanych wartości, tj. Twój fileb
zawiera 1,2,3,5,7
OP chce tylko unikalnych linii, które są 2,3
i są osiągane przez uniq -u file
rozszerzenie pliku nie ma nic z tym, twoja odpowiedź jest błędna.
Można również wydrukować unikalną wartość w „pliku” za pomocą cat
polecenia, przesyłając potok do sort
iuniq
cat file | sort | uniq -u
uniq -u doprowadza mnie do szału, ponieważ nie działa.
Więc zamiast tego, jeśli masz Pythona (większość dystrybucji Linuksa i serwerów już go ma):
#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'))
Do Twojej wiadomości, ze strony podręcznika uniq:
„Uwaga: 'uniq' nie wykrywa powtarzających się wierszy, chyba że sąsiadują ze sobą. Możesz najpierw posortować dane wejściowe lub użyć 'sort -u' bez 'uniq'. Również porównania są zgodne z regułami określonymi przez 'LC_COLLATE'."
Jeden z poprawnych sposobów wywołania: # 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
możesz użyć:
sort data.txt| uniq -u
to sortowanie danych i filtrowanie według unikatowych wartości
uniq
powinno wystarczyć, jeśli plik jest / można go posortować, jeśli z jakiegoś powodu nie możesz posortować pliku, możesz użyć awk
:
awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
sort -d "file name" | uniq -u
to zadziałało dla mnie na podobny. Użyj tego, jeśli nie jest zaaranżowane. Możesz usunąć sortowanie, jeśli jest uporządkowane
To jest dla mnie łatwiejsze.
sort -u input_filename > output_filename
-u
oznacza wyjątkowy.
To była pierwsza próba
skilla:~# uniq -u all.sorted
76679787
76679787
76794979
76794979
76869286
76869286
......
Po zrobieniu kota -e all.sortowane
skilla:~# cat -e all.sorted
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $
Co druga linia ma końcową spację :( Po usunięciu wszystkich końcowych spacji zadziałało!
Dziękuję Ci
sort file | uniq -u
wyświetli się na konsoli.