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 | uniq
işi yapmayacak. Tüm değerleri 1 kez gösterecek
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 | uniq
işi yapmayacak. Tüm değerleri 1 kez gösterecek
sort file | uniq
tü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.
Yanıtlar:
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
Aşağıdaki gibi kullanın:
sort < filea | uniq > fileb
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt
. Belki uzantıları atladınız. Bir Mac OS X kullanıyorum. filea.txt
fileb.txt
sort
ve borulama ne anlamı var uniq
sadece yapabileceği ne zaman sort -u file -o file
yinelenen değerleri senin yani ne kaldırıyor yapıyoruz fileb
içeren 1,2,3,5,7
OP sadece benzersiz çizgiler istiyor 2,3
ve elde edilir uniq -u file
Dosya uzantısı ilgisi bununla birlikte cevabınız yanlış.
Ayrıca cat
, borulama yoluyla komutu kullanarak "dosya" daki benzersiz değeri yazdırabilirsiniz sort
veuniq
cat file | sort | uniq -u
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):
#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'))
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
$ 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
kullanabilirsiniz:
sort data.txt| uniq -u
bu verileri sıralayın ve benzersiz değerlere göre filtreleyin
uniq -u < file
işi yapacak.
uniq
Dosyanı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}'
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
Bunu daha kolay buluyorum.
sort -u input_filename > output_filename
-u
benzersiz anlamına gelir.
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
sort file | uniq -u
sizin için konsola çıktı verecektir.