Benzersiz çizgiler bulun


92

Benzersiz satırları nasıl bulabilirim ve tüm kopyaları bir dosyadan nasıl kaldırabilirim? Giriş dosyam

1
1
2
3
5
5
7
7

Sonucun şöyle olmasını isterim:

2
3

sort file | uniqişi yapmayacak. Tüm değerleri 1 kez gösterecek


17
Önce dosya sıralanmalıdır. sort file | uniq -usizin için konsola çıktı verecektir.
ma77c

Bence sort file | uniqtüm değerleri 1 kez göstermesinin nedeni , ilk karşılaştığı çizgiyi hemen yazdırması ve sonraki karşılaşmalarda onları atlamasıdır.
Reeshabh Ranjan

Yanıtlar:


91

uniq ihtiyacınız olan seçeneğe sahiptir:

   -u, --unique
          only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3

33
Dosyadaki girişlerin önceden sıralanmamış olup olmadığını sıraladığınızdan emin olun. dosya.txt sırala | uniq
user3885927

Önce sıralamak istemiyorsanız cevabıma bakın. stackoverflow.com/a/54803217/5441945
hychou

28

Aşağıdaki gibi kullanın:

sort < filea | uniq > fileb

2
Bu doğru değil, sanırım şunu demek istediniz:uniq -u filea > fileb
Chris Seymour

1
Ben senin veri kopyalamak ve çalıştırın ve çalışır: sort<filea.txt | uniq>fileb.txt. Belki uzantıları atladınız. Bir Mac OS X kullanıyorum. filea.txtfileb.txt
Birinden

Orada ile yönlendirme için gerek yoktur sortve borulama ne anlamı var uniqsadece yapabileceği ne zaman sort -u file -o fileyinelenen değerleri senin yani ne kaldırıyor yapıyoruz filebiçeren 1,2,3,5,7OP sadece benzersiz çizgiler istiyor 2,3ve elde edilir uniq -u fileDosya uzantısı ilgisi bununla birlikte cevabınız yanlış.
Chris Seymour

13

Ayrıca cat, borulama yoluyla komutu kullanarak "dosya" daki benzersiz değeri yazdırabilirsiniz sortveuniq

cat file | sort | uniq -u


9

uniq -u işe yaramadığı için beni deli ediyor.

Bunun yerine, python'unuz varsa (çoğu Linux dağıtımında ve sunucusunda zaten vardır):

NotUnique.txt dosyasında veri dosyasına sahip olduğunuzu varsayarsak

#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'))

Boş satırlar nedeniyle, son kümenin '' veya yalnızca boşluk dizeleri içerebileceğini unutmayın. Bunu daha sonra kaldırabilirsiniz. Veya terminalden kopyalama yapmaktan kurtulun;)

#

Bilginize, uniq Man sayfasından:

"Not: 'uniq', bitişik olmadıkları sürece yinelenen satırları algılamaz. Önce girdiyi sıralamak isteyebilir veya 'uniq' olmadan 'sort -u' kullanabilirsiniz. Ayrıca, karşılaştırmalar 'LC_COLLATE' ile belirtilen kuralları dikkate alır."

İle çağırmanın doğru yollarından biri: # sort nonUnique.txt | uniq

Örnek çalışma:

$ 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

Boşluklar basılabilir, bu yüzden hazırlıklı olun!


3
Bu çok abartılı.
SmallChess

9

sortO (n log (n)) zaman alırken , kullanmayı tercih ediyorum

awk '!seen[$0]++'

awk '!seen[$0]++'sıfır awk '!seen[$0]++ {print}'değilse baskı satırı (= $ 0) için bir kısaltmadır seen[$0]. Daha fazla yer kaplar ama yalnızca O (n) zamanı.


7

kullanabilirsiniz:

sort data.txt| uniq -u

bu verileri sıralayın ve benzersiz değerlere göre filtreleyin



3

uniqDosyanız sıralanabiliyorsa iyi yapmalısınız, herhangi bir nedenle dosyayı sıralayamıyorsanız kullanabilirsiniz awk:

awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'


3
sort -d "file name" | uniq -u

bu benim için benzer bir şey için çalıştı. Düzenlenmemişse bunu kullanın. Düzenlenmişse sıralamayı kaldırabilirsiniz


3

Bunu daha kolay buluyorum.

sort -u input_filename > output_filename

-u benzersiz anlamına gelir.


0

Bu denediğim ilk şeydi

skilla:~# uniq -u all.sorted  

76679787
76679787 
76794979
76794979 
76869286
76869286 
......

Bir kedi yaptıktan sonra -e all.sorted

skilla:~# cat -e all.sorted 
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $

Her ikinci satırın sonunda bir boşluk vardır :( Tüm sondaki boşlukları kaldırdıktan sonra işe yaradı!

teşekkür ederim

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.