diff, 2 dosyada aynı satırı raporlar


14

Bir şarkı listesi içeren 2 dosyam var. hdsongs.txt ve sdsongs.txt

Tüm şarkıları ve çıktıları metin dosyalarına listelemek için basit bir komut dosyası yazdım, sonra bir fark çalıştırmak için. Çoğunlukla iyi çalışır, ancak komut dosyasındaki gerçek diff komutu farklı satırla aynı satırı gösterir. Bu aslında birden fazla satır için oluyor, ama hepsi değil.

Her iki dosyadaki bir şarkı örneği:

$ grep Apologize \*songs\*
hdsongs.txt:Timbaland/Apologize.mp3
sdsongs.txt:Timbaland/Apologize.mp3

Görebildiğim özel bir karakter yok:

$ cat -A hdsongs.txt sdsongs.txt | grep Apologize
Timbaland/Apologize.mp3$
Timbaland/Apologize.mp3$

Diff çalıştırdığımda, her dosyada aynı satırı gösterir; ama çizgiler aynı değil mi?

$ diff hdsongs.txt sdsongs.txt | grep Apologize
> Timbaland/Apologize.mp3
< Timbaland/Apologize.mp3

Bu iş parçacığına benzer: diff raporları aynı olmasına rağmen iki dosya farklı!

ancak bu dosya içindeki satırlar içindir, dosyanın tamamı değil ve bu durumda çözünürlük uygun değildir.

$ diff <(cat -A phonesongsonly.txt) <(cat -A passportsongsonly.txt) | grep Apologize
< Timbaland/Apologize.mp3$
> Timbaland/Apologize.mp3$

$ wdiff -w "$(tput bold;tput setaf 1)" -x "$(tput sgr0)" -y "$(tput bold;tput setaf 2)" -z "$(tput sgr0)" hdsongs.txt sdsongs.txt | grep Apologize
>Timbaland/Apologize.mp3
>Timbaland/Apologize.mp3

Farklı olan neden aynı satırı iki kez böyle rapor edeceğini bilen var mı?


1
Belki hexdumpbu iki çizgiyi deneyin ve neyin farklı olduğunu görün.
user43791

Yanıtlar:


24

Tahminimce dosyaları sıralamamışsınızdır. Sıralanmamış girdiye girebileceğiniz davranışlardan biri budur:

$ cat file1 
foo
bar
$ cat file2
bar
foo
$ $ diff file1 file2
1d0
< foo
2a2
> foo

Ancak, sıralarsanız:

$ diff <(sort file1) <(sort file2)
$ 

diffProgramın işi farklı oldukları, değilse iki dosya aynıdır, ve olmadığını söylemek. Farklı çizgiler arasındaki benzerlikleri bulmak için tasarlanmamıştır. Bir dosyanın X satırı diğerinin X satırı ile aynı değilse, dosyalar aynı değildir. Tam olarak aynı bilgileri içermeleri önemli değildir, bu bilgiler farklı bir şekilde düzenlenmişse dosyalar farklı olarak rapor edilir.


4

Dosyaların sıralandığını belirtmediğiniz için, dosyaların sıralanmadığını varsayacağım. Bu, diff her iki dosyada da farklı konumlarda bir satır göründüğünde beklenen çıktıdır . diffÇıktıya boru döşemek yerine tüm çıkışa bakarsanız bu açık olacaktır grep.


2

İnsan gözü her zaman bir bilgisayarın görüntülediği karakterler arasındaki farkı anlayamadığı ve bazı karakterler görüntülenmeyebileceği için ikili / onaltılık çıktı almak için hexdiff programı gibi bir şey kullanmaya çalışmanızı öneririm.


2
cat -Ayazdırılmayan karakterlerin çoğunu (tümü?) gösterirdi. Unicode gariplikle nasıl başa çıkacağından emin değilim ama diğer baskı dışı grafikler gösterilmeliydi.
terdon
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.