CSV dosyasından yinelenen girişleri kaldırma


13

Yinelenen referansla yeniden yazdırılan bir [csv] dosyası var, yani aynı veriler iki kez yazdırıldı. Ben kullanarak denedim nevi uniq tarafından sort myfile.csv | uniq -uherhangi bir değişiklik yoktur ancak myfile.csvaynı zamanda Denedim sudo sort myfile.csv | uniq -uama hiçbir farkı.

Şu anda csv dosyam şöyle görünüyor

a
a
a
b
b
c
c
c
c
c

Onun gibi görünmek istiyorum

a
b
c

sort -u dosyam.csv> tmp.csv; mv -f tmp.csv myfile.csv
Archemar

göre man sort, "yerinde" sıralayamazsınız.
Archemar

Ayrıca terminale güvenmemeyi de deneyebilirsiniz. Bunun yerine bu çevrimiçi aracı deneyebilirsiniz textmechanic.com/text-tools/basic-text-tools/…
Aminah Nuraini

Yanıtlar:


16

Nedeni myfile.csvçünkü değişen değil mi -useçeneği uniqolacak sadece benzersiz satırları yazdırmak. Onlar bu yüzden bu dosyada, bütün hatlar yineleniyor değil yazdırılabilir.

Bununla birlikte, daha da önemlisi, çıktı kaydedilmeyecektir myfile.csvçünkü çıktıyı (varsayılan olarak konsolunuz) uniqyazdırır stdout.

Bunun gibi bir şey yapmanız gerekir:

$ sort -u myfile.csv -o myfile.csv

Seçenekler şu anlama gelir:

  • -u - yalnızca benzersiz satırlar kullanın
  • -o - yerine bu dosyaya çıktı stdout

Daha man sortfazla bilgi için bakmalısınız .


3

Belmin'in gösterdiği gibi, sıralama harika. Cevabı, sıralanmamış veriler için en iyisidir ve hatırlanması ve kullanılması kolaydır.

Bununla birlikte, girişin sırasını değiştirdiği için de uçucudur. Verilerin kesinlikle aynı sırayla geçmesi gerekiyorsa, ancak sonraki kopyaları kaldırıyorsanız, awk daha iyi olabilir.

$ cat myfile.csv
c
a
c
b
b
a
c


$ awk '{if (!($0 in x)) {print $0; x[$0]=1} }' myfile.csv
c
a
b

Tuhaf kenar durumu, ancak zaman zaman ortaya çıkıyor.

Ayrıca, verilerinizi alayken zaten sıralanmışsa, uniq'i çalıştırabilirsiniz.

$ cat myfile.csv 
a
a
a
b
b
c
c
c
c
c


$ uniq myfile.csv 
a
b
c

Her iki önerim için dezavantaj, geçici bir dosya kullanmanız ve tekrar kopyalamanız gerektiğidir.


2

uniq -u sadece benzersiz satırlar yazdırır. Girişinizde benzersiz satırlar uniq -uolmadığından hiçbir şey yazdırmayın. Tek ihtiyacınız olan sort:

sort -u myfile.csv

2

Dosyanın sırasını korumak (sıralanmamış) ancak yine de yinelenenleri kaldırmak istiyorsanız, bunu da yapabilirsiniz

awk '!v[$1]++' /tmp/file

Örneğin

d
d
a
a
b
b
c
c
c
c
c

Çıktı verecek

d
a
b
c

Sözdizimini genişletebilir misiniz?
Sopalajo de Arrierez

Dizeyi bir karma içine yerleştirin. Dize karma içinde DEĞİLSE, yazdırın.
NinjaGaiden
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.