unix diff hasil sisi-ke-sisi?

106

Bagaimana cara memplot hasil perintah unix diff sisi-ke-sisi alih-alih satu perbedaan demi satu? Lihat contoh di bawah ini:

    diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf
< asdfsad
< fsaf
< fdsadf
---
> asdfsafdsf
> saf
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa
< fd
---
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> safa

Saya ingin mendapatkan sesuatu seperti:

diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf       > asdfsafdsf
< asdfsad        > saf       
< fsaf
< fdsadf
---
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa               > sadf
< fd              > sadf
---               > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > safa
719016
sumber
vimdiff juga dapat membantu. Semoga berhasil.
shellter

Jawaban:

168

Dari man diff, Anda bisa menggunakan -yuntuk melakukan secara berdampingan.

-y, --side-by-side
       output in two columns

Karenanya, katakan:

diff -y /tmp/test1  /tmp/test2

Uji

$ cat a                $ cat b
hello                  hello
my name                my name
is me                  is you

Mari bandingkan mereka:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you
fedorqui 'JADI berhenti merugikan'
sumber
39
Perhatikan yang diffmemiliki lebar keluaran maksimum hard-code (130 kolom). Tambahkan opsi diff --width=$COLUMNSuntuk mengatur ini ke lebar terminal Anda.
ntc2
6
Juga untuk diff besar, cukup salin ke yang lebih sedikit seperti ini untuk diff scrolly / searchable yang bagus:diff -y /tmp/test1 /tmp/test2 | less
willbradley
periksa colordiff
Vladislavs Dovgalecs
5
lebih baikdiff --width=$COLUMNS --suppress-common-lines --side-by-side a b
rubo77
@ rubo77 Bergantung pada bagaimana Anda mengatur perluasan tab, Anda mungkin juga ingin memperluas tab ke spasi sehingga keluaran berbaris dengan benar di kolom:diff --expand-tabs --width=$COLUMNS --suppress-common-lines --side-by-side a b
EdwardTeach
40

Dari beranda icdiff :

masukkan deskripsi gambar di sini

Terminal Anda dapat menampilkan warna, tetapi kebanyakan alat diff tidak memanfaatkannya dengan baik. Dengan menyorot perubahan, icdiff dapat menunjukkan kepada Anda perbedaan antara file yang serupa tanpa menghalangi. Ini sangat membantu untuk mengidentifikasi dan memahami perubahan kecil dalam jalur yang ada.

Alih-alih mencoba menjadi pengganti diff untuk semua keadaan, tujuan icdiff adalah menjadi alat yang dapat Anda raih untuk mendapatkan gambaran yang lebih baik tentang apa yang berubah ketika tidak segera terlihat dari diff.

IMHO, hasilnya jauh lebih mudah dibaca daripada diff -y.

timmfin
sumber
29
diff -y --suppress-common-lines file1 file2
Rjazhenka
sumber
3
ini harus menjadi jawaban yang diterima karena hanya -ymenunjukkan garis umum juga yang tidak sama dengan diffpertanyaan yang adil dan asli. +1.
helix
lebih baikdiff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77
13

Kamu bisa memakai:

sdiff  file1 file2

atau

diff -y file1 file2

atau

vimdiff file1 file2

untuk tampilan berdampingan.

srpatch
sumber
2
Saya bertanya-tanya apa perbedaan antara diff -ydan sdiff? Hasil mereka terlihat identik dengan saya.
Hux
11

Anda harus memiliki sdiffpenggabungan perbedaan file secara berdampingan. Bacalah man sdiffuntuk cerita lengkapnya.

Chris Seymour
sumber
2
Di sistem saya (GNU / Linx) sdifftampaknya melakukan hal yang sama diff -ydan sdiffdokumentasi info mengatakan itu tidak berlaku lagi: "'sdiff' tanpa '--output' ('-o') menghasilkan perbedaan berdampingan. Penggunaan ini sudah usang; gunakan opsi '--side-by-side' ('-y') dari 'diff' sebagai gantinya. "
ntc2
7

Anda cukup menggunakan:

diff -y fileA.txt fileB.txt | colordiff

Ini menunjukkan output terbagi dalam dua kolom dan diwarnai! ( colordiff)

Jorge Fernando Matricali
sumber
1
Baru saja mencobanya di OSX dan tidak berfungsi di sini. Mungkin hanya untuk linux.
Nikola Petkanski
Colordiff tidak ada di osx.
terry franguiadakis
Anda dapat menginstal colordiff di OSX menggunakan Homebrew brew install colordiff Lihat rumus colordiff
Jorge Fernando Matricali
6

Gunakan -yopsi:

diff -y file1 file2
rektummelancolique.dll
sumber
6

Coba cdiff - Lihat perbedaan warna dan inkremental di ruang kerja atau dari stdin dengan dukungan berdampingan dan pager otomatis.

ymattw
sumber
5

Anda bisa menggunakan vimdiff.

Contoh:

vimdiff file1 file2
Eduardo Cuomo
sumber
4

Jika file Anda memiliki penggunaan spasi dan tab yang tidak konsisten, mungkin ada gunanya menyertakan -targumen untuk memperluas tab:

diff -ty file1 file2
Ember
sumber
1

Perintah diff yang ditingkatkan dengan warna, berdampingan dan alias

Misalkan isi file seperti:

cat /tmp/test1.txt
1
2
3
4
5
8
9

dan

cat /tmp/test2.txt
1
1.5
2
4
5
6
7

Sekarang membandingkan secara berdampingan

diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7

Anda dapat menentukan alias untuk digunakan

alias diff='diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always'

Kemudian hasil diff baru:

diff /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7
ahmet
sumber