İki büyük metin dosyasını dağıtma


32

İki büyük dosyam var (her biri 6 GB). \nAyırıcılar olarak satır beslemeleri ( ) ile sıralanmamışlardır . Onları nasıl ayırt edebilirim? 24 saatin altında sürmeli.

Yanıtlar:


45

En belirgin cevap sadece diff komutunu kullanmaktır ve muhtemelen --speed-large-files parametresini eklemek iyi bir fikirdir.

diff --speed-large-files a.file b.file

Sıralanmamış dosyalardan bahsediyorsunuz, bu yüzden önce dosyaları sıralamanız gerek

sort a.file > a.file.sorted
sort b.file > b.file.sorted
diff --speed-large-files a.file.sorted b.file.sorted

2. sıralama çıkışını doğrudan diff'e bağlayarak ekstra bir çıktı dosyası oluştururken tasarruf sağlayabilirsiniz

sort a.file > a.file.sorted
sort b.file | diff --speed-large-files a.file.sorted -

Açıkçası, bunlar bol miktarda kullanılabilir belleğe sahip bir sistemde en iyi şekilde çalışır ve muhtemelen bol miktarda boş disk alanına ihtiyacınız olacaktır.

Bunları daha önce denediyseniz sorunuzdan net değildi. Eğer öyleyse, neyin yanlış gittiğini bilmek faydalı olacaktır (çok uzun sürdü vb.). Her zaman, stok sıralama ve fark komutlarının, işleri farklı şekilde gerçekleştirmeyi mümkün kılan dosyaların etki alanına özgü bazı özellikleri olmadıkça, en azından özel komutları yapma eğiliminde olduğunu buldum.


2
+1. Tüm geçici dosyaları adlandırılmış yöneltmelerle çıkartabilirsiniz. Çıktı olarak kullanmadan önce mkfifooluşturmak için kullanın . Her iki koyun ile s arka planda ve fark için dosya adları olarak borulu hem kullanın. [ab].file.sortedsortsort&
krissi

15
@krissi Bu sözdizimini kullanarak da aynı efekti gerçekleştirebilirsiniz:diff <(command 1) <(command 2)
Michael Mrozek

Teşekkürler çalıştı. Birkaç GB bellek düşüncesine ihtiyacım vardı ama 16GB'lık bir Amazon EC2 örneği
tamir

7
Benim gibi biri neden <(cmd1) <(cmd2)sözdiziminin işe yaradığını merak ediyorsa (standart girişi iki kez yönlendirmek gibi geliyor!), Deneyin echo hello <(cmd1) <(cmd2). hello /dev/fd/63 /dev/fd/62Aniden açıkça ortaya koyan bir şey göreceksiniz ;)
alex

3
Tecrübelerime göre, --speed-large-filesyeterli RAM'iniz yoksa seçenek yardımcı olmaz. Ayrıca, korumak istediğiniz çok satırlı bir kayıt yapınız varsa ön sıralama yardımcı olmaz. (@Unhammer tarafından) Yukarıda değinilen seçenekleri ilginç olmakla çıktı rdiffve bsdiffoldukça ikili olduğunu. bdiffHeirloom Araç Kutusu'ndan yükleme göz kamaştırıcı bir göreve benziyor (Heirloom devtools, soyu tükenmiş başlık dosyaları gerektirir…). Gerçekten çabaya değer mi? Başka alternatifler var mı?
Christian Pietsch

5

Girişlerin sıralanması ve diffprograma girişlerinin sıralandığını bildirmesi çok büyük bir hızlanma sağlar. diffBöyle bir seçeneğe sahip olan hiçbir şey bilmiyorum ama commsıralanan girdiler varsayar ve amaçlarınız için yeterli olursa daha hızlı olur.


commBunun için harika çalıştı, daha önce hiç duymadım ama görünüşe göre çekirdeklerinde kaldı.
theferrit32
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.