Yinelenen satırları kaldır: çevrimiçi metin tekilleştirme
Herhangi bir listeyi yapıştırın, tam yinelenenleri kaldırın, sırayı koruyun veya sonucu sıralayın. Büyük/küçük harf ve boşluk seçenekleri dahildir.
Bu aracın yaptığı şey
Tek bir metin bloğundan yinelenen satırları kaldırmak için ücretsiz, tarayıcı içi bir araçtır. Girdinizi yapıştırın, orijinal sırayı korumak mı yoksa çıktıyı sıralamak mı istediğinizi seçin, ve yinelenenler gider. Hiçbir şey makinenizden çıkmaz.
Komut satırındaki sort -u'nun GUI eşdeğeridir, ya da orijinal sırayla ilk geçişi korumak istediğinizde awk '!seen[$0]++''in. sort | uniq çalıştırmak için terminale 4.000 satırlık bir e-posta dışa aktarımını yapıştırdıysanız, bu terminalsiz aynı şeydir.
Tekilleştirme tam ve satır temellidir. İki satırın yinelenen sayılması için karakter karakter eşleşmesi gerekir (büyük/küçük harf ve kırpma seçeneklerinize bağlı olarak). Bulanık eşleşme, neredeyse-yinelenen tespiti ve benzerlik puanlaması bilinçli olarak kapsam dışındadır. Farklı sorun, farklı araç.
Tekilleştirme burada gerçekte nasıl çalışır
Araç dahili olarak her satırı bir kez gezer ve görülen değerleri hash temelli bir kümede izler. Bu, JavaScript'in Set'iyle veya Python'ın set'iyle aynı veri yapısıdır. Aramalar ortalama O(1)'dir, dolayısıyla normal bir dizüstü bilgisayarda bir milyon satır bir saniyenin altında çalışır. Altta yatan algoritma sade hash table üyeliğidir.
İki mod. Sırayı koru her satırın ilk geçişini tutar ve sonraki her yinelenen satırı atar, tıpkı awk '!seen[$0]++''in davranışı gibi. Sırala ve tekilleştir önce tüm girdiyi alfabetik olarak sıralar ve her benzersiz satırı bir kez yayar, tıpkı sort -u'nun davranışı gibi. Aşağı akış tüketicinizin beklediğini seçin.
Karşılaştırmanın kendisi için seçenekler vardır. Büyük/küçük harf duyarsız, [email protected] ve [email protected]'u aynı satır olarak ele alır. Boşlukları kırp karşılaştırmadan önce baştaki ve sondaki boşlukları ve sekmeleri kaldırır, böylece " example", "example ", ve "example" tek bir girdiye düşer. İkisi de varsayılan olarak kapalıdır çünkü güvenli davranış yazılanı tam olarak eşleştirmektir.
Üç adımda yinelenen satırları kaldırma
Bir giriş paneli, bir çıkış paneli. Hiçbir şey yüklenmez.
- 1
Satırlarınızı yapıştırın
Metni giriş paneline bırakın. Her liste işe yarar: e-postalar, IP'ler, URL'ler, SKU'lar, log zaman damgaları, paket adları, satır başına bir tane olan her şey. Sonucu önce görmek isterseniz, kasıtlı yinelenenleri olan bir örnek yüklemek için Sample'a tıklayın.
- 2
Seçeneklerinizi belirleyin
Sırayı koru (ilk geçişi tutar, awk '!seen[$0]++' gibi) veya Sırala ve tekilleştir (alfabetik, sort -u gibi) seçin. Alice ve alice birleşmeli ise Büyük/küçük harf duyarsız'ı, baştaki veya sondaki boşluklar yok sayılmalı ise Boşlukları kırp'ı açın.
- 3
Sonucu kopyalayın veya indirin
Sağdaki panel tekilleştirilmiş çıktıyı ve kaç satırın kaldırıldığının sayımını gösterir. Almak için Copy'ye, bir .txt dosyası olarak kaydetmek için Download'a tıklayın. İki panel bağımsız olarak kayar, böylece hangi satırların kaybolduğunu görebilirsiniz.
Bu aracı ne zaman istersiniz
İçe aktarmadan önce bir pazarlama e-posta listesini temizleme
Listeyi bir CRM'den dışa aktarın, web semineri kaydından bir başkasını ekleyin, ikisini de araca yapıştırın, Büyük/küçük harf duyarsız ve Boşlukları kırp açıkken tekilleştirin. Mailchimp ve HubSpot zaten içe aktarmada yinelenen adresleri reddeder, ama sadece yinelenenler yerine tüm partiyi reddederler, dolayısıyla bunu önce yapmak yeniden yüklemeyi engeller.
Bir denetim günlüğündeki IP adreslerini tekilleştirme
Bir haftalık auth.log'dan awk ile kaynak IP'leri çekin, yapıştırın, sırayı koru modunda tekilleştirin. "Kim önce göründü" gibi kaba kronolojik sinyali kaybetmeden benzersiz saldırganların temiz bir listesini elde edersiniz. Bunu güvenlik duvarınızın engelleme listesine besleyin.
Birden çok sayfadan kazılan URL listesini temizleme
Bir site haritasını ve sayfalara bölünmüş bir dizini kazımak aynı URL'yi birden çok kez döndürür. Birleştirilmiş listeyi bırakın, sıralayın ve tekilleştirin, ve kanonik bir tarama sınırı elde edersiniz. Sondaki eğik çizgiler ve sorgu dizeleri hâlâ farklı satırlar olarak sayılır, dolayısıyla birleştirmek istiyorsanız önce bunları normalleştirin.
pip freeze veya npm ls gürültüsünü benzersiz paketlere indirgeme
İki virtualenv arasında pip freeze, ya da bir monorepoda npm ls --all aynı paketi birçok satırda yazdırır. Birleştirin, yapıştırın, tekilleştirin, ve gerçekte neyin kurulu olduğuna hızlıca bakmak için ad==sürüm başına bir satır elde edersiniz.
Birden çok kaynaktan yapıştırılan CSV satırları
Satır seviyesinde tekilleştirme için işe yarar, her satırın kendi kendine yeten bir kayıt olduğunda genellikle ihtiyacınız olan budur. Dikkat: bu düz metin tekilleştirmedir, sütun farkındalığı yoktur. Tırnak içindeki virgüllere saygı duyan ve sütun sırasını yok sayan gerçek satır seviyesi tekilleştirme istiyorsanız gerçek bir CSV aracı kullanın. Hesap tablosundan yapıştırılan çoğu durum için satır tekilleştirme yeterlidir.
Kopyalanmış kaynakça veya alıntı listesini temizleme
Üç tarayıcı sekmesinden tek bir belgeye referans kopyalamak sizi aynı DOI'yi dört kez tekrar etmiş olarak bırakır. Yapıştırın, Boşlukları kırp'ı açın (çünkü PDF'lerden kopyala-yapıştır başıboş boşluklar eklemeyi sever), tekilleştirin, ve temiz bir referans bölümü elde edersiniz. Sıralama modu burada alfabetik referans listeleri için kullanışlıdır.
Tekilleştirme hızlı başvuru
Metin tekilleştirirken en sık ısıran sınır durumlar. Çıktıya güvenmeden önce bir kez göz gezdirmeye değer.
| Topic | What this tool does |
|---|
| Sıra koruma | Sırayı koru ilk geçişi tutar ve sonraki yinelenenleri atar. awk '!seen[$0]++' veya Python list(dict.fromkeys(lines)) gibi. Sıralama modu alfabetiktir, sort -u gibi. |
|---|
| Büyük/küçük harf duyarlılığı | Varsayılan olarak kapalı. Büyük/küçük harf duyarsız açık olmadıkça Alice ve alice farklıdır. E-posta ve kullanıcı adı listeleri genellikle açık ister; SKU listeleri genellikle istemez. |
|---|
| Boşluk kırpma | Varsayılan olarak kapalı. Boşlukları kırp açık olana kadar " example", "example " ve "example" üç farklı satırdır. Dahili boşluklara hiç dokunulmaz. |
|---|
| Boş satırlar | Normal bir satır değeri olarak ele alınır: boş dize. Tekilleştirme açıkken, girdide herhangi biri varsa bir boş satır tutarsınız. Her boş satırı sıyırmak için ayrı bir boşluk-temizleyici adımı kullanın. |
|---|
| Satır sonları (CRLF vs LF) | Sondaki \r bölmeyi atlatırsa \r\n ile biten bir satır \n ile bitenden teknik olarak farklıdır. \r?\n'de bölüyoruz, dolayısıyla karışık satır sonları çöker. Hayalet yinelenenler görüyorsanız, girdinizde satır ortasında başıboş \r karakterleri vardır. |
|---|
| Unicode normalleştirme | Görsel olarak özdeş iki dize, biri NFC ve diğeri NFD kullanıyorsa eşit olmayacak şekilde karşılaştırılabilir (önceden oluşturulmuş vs ayrıştırılmış aksanlar). Bu araç normalleştirmez. Bundan şüpheleniyorsanız, önce her iki girdiyi de String.prototype.normalize('NFC') veya Python unicodedata.normalize ile NFC'ye normalleştirin. |
|---|
| Girdinin sonundaki son satır sonu | \n ile biten bir dosyanın hayali boş bir son satırı vardır. Çoğu editör bunu gizler. Bunu, herhangi bir başka boş satırla birlikte tekilleştirilmiş bir boş satır olarak ele alıyoruz. Çıktı, gelenek olarak tek bir sondaki satır sonunu korur. |
|---|
| Kodlama | Baştan sona UTF-8. Yapıştırdığınızda kod çözmeyi tarayıcı halleder; baytlarınız aslen Latin-1 veya Windows-1252 ise, ASCII dışındaki karakterler tekilleştirme çalışmadan önce yanlış olabilir. Kodlamayı yukarı akışta dönüştürün. |
|---|
Yinelenen satırları kaldır: sık sorulan sorular
Orijinal sırayı koruyor mu yoksa çıktıyı sıralıyor mu?
İkisi de, sizin seçiminiz. Sırayı koru her satırın ilk geçişini tutar ve sonraki her yinelenen satırı atar, dolayısıyla çıktı kabaca girdiyle aynı sırada okunur. Sırala ve tekilleştir tüm sonucu alfabetik olarak sıralar. Sıra anlam taşıdığında (kronolojik günlükler, sıralanmış listeler) sırayı koru istersiniz. Sadece temiz benzersiz bir küme gerektiğinde sırala istersiniz.
Karşılaştırma büyük/küçük harf duyarlı mı?
Varsayılan olarak evet, çünkü güvenli varsayım budur. Büyük/küçük harf duyarsız'ı açmadığınız sürece Alice ve alice farklı satırlardır. Çoğu e-posta sistemi adresleri yerel kısımda büyük/küçük harf duyarsız olarak ele alır, dolayısıyla e-posta listeleri için bu seçeneği neredeyse her zaman açık istersiniz. Büyük/küçük harf duyarsız platformlardaki kullanıcı adları için de aynı geçerlidir. Gerçekten büyük/küçük harf duyarlı olan SKU'lar ve tanımlayıcılar için kapalı bırakın.
Baştaki ve sondaki boşlukları yok sayabilir mi?
Evet, Boşlukları kırp ile. Karşılaştırmadan önce baştaki ve sondaki boşlukları ve sekmeleri kaldırır, dolayısıyla " example ", "example " ve "example" tek bir girdiye birleşir. Girdiniz elle düzenlenmişse veya bir PDF'den kopyala-yapıştırlanmışsa kullanışlıdır, ikisi de başıboş boşluklar bırakır. Bir satırın içindeki dahili boşluk rahat bırakılır.
Bu Unix uniq komutundan nasıl farklı?
uniq komutu yalnızca komşu yinelenenleri birleştirir, yaygın bir sürpriz. Farklı bir satırla ayrılmış iki özdeş satır uniq'i birlikte atlatır. Unix deyiminin sort | uniq veya sort -u olmasının sebebi budur: yinelenenlerin yan yana olması için önce sıralamanız gerekir. Bu araç sıralı bir girdiye ihtiyaç duymaz, çünkü ilerlerken görülen her satırı bir hash kümesinde takip eder.
Her satırın kaç yinelenen olduğunu sayar mı?
Hayır, bu farklı bir özelliktir. Sayım gerekiyorsa, Unix komutu sıralamadan sonra uniq -c'dir: sort input.txt | uniq -c | sort -rn sayıma göre sıralanmış bir frekans tablosu verir, en yaygın girdileri bulurken istediğiniz budur. Bu araç temizliğe odaklanır, analize değil.
Ne kadar büyük bir girdi yapıştırabilirim?
Birkaç milyon satır iyi. Tekilleştirmenin kendisi sabit zamanlı hash aramalarıyla O(n)'dir, dolayısıyla darboğaz tekilleştirme değil, sonuç panelini render eden tarayıcıdır. Çok büyük girdiler (50 MB+) için textarea yeniden boyandığında belirgin bir duraklama bekleyin. Girdiniz o kadar büyükse, neredeyse kesinlikle elinizde zaten sort -u vardır; onu kullanın.
Gizlilik ve bunun nasıl çalıştığı
Metniniz tarayıcınızı asla terk etmez. Tekilleştirme makinenizde, yerel olarak, bir JavaScript Set'ine karşı çalışır. Girdiniz üzerinde analitik yok, log yok, buluta gidiş geliş yok. Tüm araç birkaç satır koddur: satır sonlarında bölün, gezin, görmediklerimizi tutun. Ardındaki standart kütüphane ilkelleri MDN'in Set referansı ve eşdeğer Python set belgeleri'nde belgelenmiştir.