uniq komutu düzgün çalışmıyor mu?


22

Bu yüzden md5çıktılarım olarak dosyalarımın karmasını kontrol ediyorum :

657cf4512a77bf47c39a0482be8e41e0  ./dupes2.txt
657cf4512a77bf47c39a0482be8e41e0  ./dupes.txt
8d60a927ce0f411ec94ac26a4785f749  ./derpina.txt
15f63928b8a1d5337137c38b5d66eed3  ./foo.txt
8d60a927ce0f411ec94ac26a4785f749  ./derp.txt

Ancak, find . -type f -exec md5sum '{}' ';' | uniq -w 33benzersiz karmaları bulmak için çalıştırdıktan sonra şunu alıyorum:

657cf4512a77bf47c39a0482be8e41e0  ./dupes2.txt
8d60a927ce0f411ec94ac26a4785f749  ./derpina.txt
15f63928b8a1d5337137c38b5d66eed3  ./foo.txt
8d60a927ce0f411ec94ac26a4785f749  ./derp.txt

Anladığım kadarıyla, bunlardan sadece bir tanesi derpina.txtveya derp.txthash'ları aynı olduğundan görünmelidir. Bir şey mi eksik? Birileri beni neden böyle çıktığı konusunda aydınlatabilir mi?


1
Anladım. Görünüşe göre uniq bitişik olmadıkça tekrarlanan çizgileri algılamıyor. Bana yardımcı oldu cevabı bağlantı stackoverflow.com/questions/23114677/…
user2127726

Yanıtlar:


48

Daha sortönce kullanmanız gerekir uniq:

find . -type f -exec md5sum {} ';' | sort | uniq -w 33

uniqsadece tekrarlanan çizgileri kaldırır. Tekrar arayan hatları yeniden sıralamaz. sortbu kısmı yapar.

Bu belgelenmiştir man uniq:

Not: 'uniq' bitişik olmadıkça tekrarlanan satırları algılamaz. Önce girişi sıralamak ya da sort -u' withoutuniq ' kullanmak isteyebilirsiniz .


uniqsort -utüm sistemlerde varsayılan olarak takma ad kullanılmalıdır. Hiç değilse her zaman düzgün çalışması için "sırala" ya ihtiyaç duyar.
Devaroop

Bu değişiklik bazı karışıklıkları azaltacaktır. Öte yandan, uniqmevcut olmayan birçok özelliğe sahiptir sort -u. Ayrıca, birinin uniqolmadan kullanmak istediği durumlar vardır sort.
John1024

5

Girdilerin uniqsıralanması gerekiyor. Yani örnek durum için,

find . -type f -exec md5sum '{}' ';' | sort | uniq -w 33

işe yarardı. -w( --check-chars=N) Yalnızca ilk sütunu ile ilgili benzersiz çizgiler yapar; Bu seçenek bu durumda işe yarar. ancak hattın ilgili kısımlarını belirleme olanakları uniqsınırlıdır. Örneğin, sütun 3'ü yok sayarak bazı sütun 3 ve 5'te çalışmayı belirleme seçeneği yoktur.

Komutun sortbenzersiz çıktı satırları için bir seçeneği vardır ve satırlar, sıralama için kullanılan tuşlara göre benzersizdir. Bunun anlamı sort, çizgilerin hangi kısımda olması gerektiği ile ilgili olarak tanımlanacak güçlü anahtar sözdiziminden faydalanabiliriz .

Örneğin,

find . -type f -exec md5sum '{}' ';' | sort -k 1,1 -u

sadece aynı sonucu verir, ancak sortparça diğer kullanımlar için daha esnektir.


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.