Plik należy najpierw posortować. sort file | uniq -uwyświetli się na konsoli.
ma77c
Myślę, że powodem sort file | uniqpokazania wszystkich wartości 1 raz jest to, że natychmiast drukuje linię napotkaną za pierwszym razem, a przy kolejnych spotkaniach po prostu je pomija.
To nieprawda, myślę, że miałeś na myśli:uniq -u filea > fileb
Chris Seymour
1
I skopiować dane i uruchomić go i to działa sort<filea.txt | uniq>fileb.txt. Może pominąłeś rozszerzenia. Używam Mac OS X. musisz przejść z filea.txtdo innegofileb.txt
kasavbere
Nie ma potrzeby przekierowywania z sorti jaki jest sens przekierowania do uniqktórego można po prostu zrobić sort -u file -o fileto, co robisz, to usunięcie zduplikowanych wartości, tj. Twój filebzawiera 1,2,3,5,7OP chce tylko unikalnych linii, które są 2,3i są osiągane przez uniq -u filerozszerzenie pliku nie ma nic z tym, twoja odpowiedź jest błędna.
Chris Seymour
12
Można również wydrukować unikalną wartość w „pliku” za pomocą catpolecenia, przesyłając potok do sortiuniq
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):
Zakładając, że masz plik danych w 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'))
Zwróć uwagę, że ze względu na puste wiersze ostateczny zestaw może zawierać ciągi znaków „” lub tylko spacje. Możesz to później usunąć. Lub po prostu uciec od kopiowania z terminala;)
#
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
Przykładowy bieg:
$ 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
Spacje mogą zostać wydrukowane, więc bądź przygotowany!
Chociaż sortzajmuje O (n log (n)) czasu, wolę używać
awk '!seen[$0]++'
awk '!seen[$0]++'to skrót od awk '!seen[$0]++ {print}', print line (= $ 0), jeśli seen[$0]nie jest zerem. Zajmuje więcej miejsca, ale tylko O (n) czasu.
sort file | uniq -u
wyświetli się na konsoli.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:źródło
Użyj w następujący sposób:
źródło
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt
. Może pominąłeś rozszerzenia. Używam Mac OS X. musisz przejść zfilea.txt
do innegofileb.txt
sort
i jaki jest sens przekierowania douniq
którego można po prostu zrobićsort -u file -o file
to, co robisz, to usunięcie zduplikowanych wartości, tj. Twójfileb
zawiera1,2,3,5,7
OP chce tylko unikalnych linii, które są2,3
i są osiągane przezuniq -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 dosort
iuniq
cat file | sort | uniq -u
źródło
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):
Zakładając, że masz plik danych w notUnique.txt
Zwróć uwagę, że ze względu na puste wiersze ostateczny zestaw może zawierać ciągi znaków „” lub tylko spacje. Możesz to później usunąć. Lub po prostu uciec od kopiowania z terminala;)
#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
Przykładowy bieg:
Spacje mogą zostać wydrukowane, więc bądź przygotowany!
źródło
Chociaż
sort
zajmuje O (n log (n)) czasu, wolę używaćawk '!seen[$0]++'
to skrót odawk '!seen[$0]++ {print}'
, print line (= $ 0), jeśliseen[$0]
nie jest zerem. Zajmuje więcej miejsca, ale tylko O (n) czasu.źródło
możesz użyć:
to sortowanie danych i filtrowanie według unikatowych wartości
źródło
uniq -u < file
wykona robotę.źródło
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}'
źródło
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
źródło
To jest dla mnie łatwiejsze.
-u
oznacza wyjątkowy.źródło
To była pierwsza próba
Po zrobieniu kota -e all.sortowane
Co druga linia ma końcową spację :( Po usunięciu wszystkich końcowych spacji zadziałało!
Dziękuję Ci
źródło