2016-03-21 17 views
0

Bu 2 büyük dosyayı unix'te nasıl karşılaştırabilirim?Unix dosyasındaki 2 dosyayı karşılaştırın (2M sayılar/satırlar/çizgiler), file2 (2.000.480 sayı/satır/satır)

'grep -Fxvf dosyasını kullanmayı denedim1.txt file2.txt | wc -l 'ancak çıktı 2.000.480 ve dosya1 ve dosya2 değiştirildiğinde çıkış 1,999,999'dur.

'480' çıktısını nasıl alabilirim, çünkü beklediğim budur.

Ayrıca, diff/cmp komutlarını kullanmayı denedim, ancak çıktı çok karmaşık.

Herhangi bir fikrin var mı?

Teşekkür ederiz şimdiden iyi günler. Tanrısız!

+0

Neden expe Her iki işlemi de (dosya1 ve dosya2 değiştirerek) eşit sonuçlara dönün mü? Dosya2.txt dosyasının sadece dosya2'de ve dosya1'de görünmeyen daha fazla kalıp içerdiği görülüyor. Dosya adı argümanlarını değiştirirken, dosya1'de dosya2'de görünmeyen kalıpları bulmaya çalışacak ve bunların sayısı daha az olabilir. – sramij

+0

Merhaba sramij, sadece dosya 1 ve dosya2 değiştirmeyi denedim. Ben de kendi yolumda denedim. Aşağıya bakınız. dosya 1: elma turuncu kivi dosya2'nin: kivi elma Pakwan sonra grep -Fvxf dosya1 dosya2 çıkış Pakwan olduğunu. Bu yüzden yukarıdaki senaryoda aynı komutu kullandığımda düşünüyorum. Çıktım olarak bir '480' olacak. Haklı mıyım Teşekkür ederiz! – user2632704

+0

, her iki dosyada üye olmayanlar da dahil olmak üzere, her biri 5-6 kayıt içeren 2 dosya oluşturur. Bunu işe alın, daha sonra büyük dosyalarınızla çalıştığını onaylayın. Ayrıca, diff ve cmp'den de bahsettiniz, ama '' man 'size başka fikirler de gösterebilir. Eğer Q'nuzu tavsiye ettiğim küçük örnek dosyaları ile düzenlerseniz, insanlar size hemen yardımcı olacaktır. Ayrıca 2 giriş verilen beklenen çıkışı da belirtiniz. İyi şanslar. – shellter

cevap

0

2 dosyadaki satır numaralarındaki bir farkın mutlak değerini istediğinizi düşünüyorum. awk ile kolayca elde edebilir ve iyi bir sonuç elde edebilirsiniz. Bir dizi içindeki satır sayısını okur ve daha sonra END satırındaki dizi değerlerini çıkarırsınız. Saf kabuk için daha karmaşık olmak zorunda.

$ seq 1 10 > ten 
$ seq 1 14 > fourteen 

Ve sonra yapmanız:

$ (wc -l ten ; wc -l fourteen) | awk '{ print $1}' | sort -rn | xargs -J % echo % - p | dc 

sonucu:

4 

Ama olurdu çok daha iyi bir yol oluşturulan bazı test verileri (10 ve 14 hat dosyaları) almak hayal 3 satırda yapın (file1 için kelime sayımı yapın, sonra file2 ve sonra çıkarın)

İlgili konular