Saya punya beberapa dump sql yang saya cari perbedaannya. diff
jelas dapat menunjukkan kepada saya perbedaan antara dua baris, tapi saya mendorong diri saya mencoba untuk menemukan nilai mana dalam daftar panjang nilai yang dipisahkan oleh koma yang sebenarnya menyebabkan garis menjadi berbeda.
Alat apa yang dapat saya gunakan untuk menunjukkan perbedaan karakter yang tepat antara dua baris dalam file tertentu?
command-line
diff
pengguna394
sumber
sumber
Jawaban:
Ada wdiff , kata-diff untuk itu.
Di desktop, berbaur dapat menyoroti perbedaan dalam satu baris untuk Anda.
sumber
wdiff -w "$(tput bold;tput setaf 1)" -x "$(tput sgr0)" -y "$(tput bold;tput setaf 2)" -z "$(tput sgr0)" file1 file2
wdiff a b | colordiff
dwdiff
alat yang sebagian besar kompatibel denganwdiff
tetapi juga mendukung keluaran berwarna dan mungkin beberapa fitur lainnya. Dan itu lebih tersedia di beberapa distribusi Linux seperti Arch.wdiff -n a b | colordiff
, menyarankanman colordiff
.Hanya metode lain menggunakan git-diff:
grep -v jika tidak tertarik pada posisi diffs.
sumber
Saya sudah menggunakan
vimdiff
ini.Berikut adalah tangkapan layar (bukan milik saya) yang menunjukkan sedikit perbedaan satu atau dua karakter yang cukup baik. Sebuah tutorial cepat juga .
sumber
vimdiff -c 'set wrap' -c 'wincmd w' -c 'set wrap' a b
,, sarankan stackoverflow.com/a/45333535/2097284 .Ini adalah metode "..hair dari anjing yang menggigitmu" ...
diff
membuat Anda sampai pada titik ini; gunakan untuk membawa Anda lebih jauh ...Berikut ini adalah output dari menggunakan pasangan garis sampel ...
☻
menunjukkan TABIni skripnya .. Anda hanya perlu menemukan pasangan garisnya entah bagaimana .. (Saya telah menggunakan diff hanya sekali (dua kali?) Sebelum hari ini, jadi saya tidak tahu banyak pilihannya, dan memilah opsi untuk ini script sudah cukup untuk saya, untuk satu hari :) .. Saya pikir itu harus cukup sederhana, tetapi saya harus istirahat kopi ....
sumber
wdiff
sebenarnya adalah metode yang sangat lama membandingkan file kata per kata. Ini berfungsi dengan memformat ulang file, kemudian gunakandiff
untuk menemukan perbedaan dan meneruskannya kembali. Saya sendiri menyarankan untuk menambahkan konteks, daripada membandingkan kata per kata, ia melakukannya dengan setiap kata dikelilingi oleh kata-kata 'konteks' lainnya. Itu memungkinkan diff untuk menyinkronkan dirinya sendiri pada bagian-bagian umum dalam file jauh lebih baik, terutama ketika file sebagian besar berbeda dengan hanya beberapa blok kata-kata umum. Misalnya ketika membandingkan teks untuk plagiarisme, atau digunakan kembali.dwdiff
kemudian dibuat dariwdiff
. Tetapidwdiff
gunakan fungsi pemformatan ulang teks tersebut untuk efek yang baik didwfilter
. Ini adalah pengembangan yang luar biasa - ini artinya Anda dapat memformat ulang satu teks untuk mencocokkan yang lain, dan kemudian membandingkannya dengan menggunakan penampil gambar grafik baris per baris. Sebagai contoh, menggunakannya dengan ...Ini memformat
file1
ke formatfile2
dan memberikannyadiffuse
untuk perbandingan visual.file2
belum dimodifikasi, sehingga Anda dapat mengedit dan menggabungkan perbedaan kata ke dalamnya secara langsung didiffuse
. Jika Anda ingin mengeditfile1
, Anda dapat menambahkan-r
untuk membalikkan file mana yang diformat ulang. Cobalah dan Anda akan menemukan itu sangat kuat!Preferensi saya untuk perbedaan grafis (ditunjukkan di atas) adalah
diffuse
karena terasa jauh lebih bersih dan lebih bermanfaat. Juga merupakan program python mandiri, yang berarti mudah untuk menginstal dan mendistribusikan ke sistem UNIX lainnya.Difer grafis lain tampaknya memiliki banyak ketergantungan, tetapi juga dapat digunakan (pilihan Anda). Ini termasuk
kdiff3
atauxxdiff
.sumber
Menggunakan solusi @ Peter.O sebagai dasar, saya menulis ulang untuk membuat sejumlah perubahan.
./hairOfTheDiff.sh file1.txt file2.txt
demo
di sumbernya; ini dapat membuka pintu untuk pemipaan agar tidak perlu file untuk dua input terpisah juga, menggunakanpaste
dan beberapa file-deskriptor.Tidak ada highlight berarti karakter berada di kedua baris, highlight berarti berada di baris pertama, dan merah berarti di baris kedua.
Warna dapat diubah melalui variabel di bagian atas skrip dan Anda bahkan dapat melepaskan warna sepenuhnya dengan menggunakan karakter normal untuk mengekspresikan perbedaan.
sumber
Berikut ini satu kalimat sederhana:
diff -y <(cat a.txt | sed -e 's/,/\n/g') <(cat b.txt | sed -e 's/,/\n/g')
Idenya adalah untuk mengganti koma (atau pembatas mana pun yang ingin Anda gunakan) dengan menggunakan baris baru
sed
.diff
kemudian mengurus sisanya.sumber
.csv
mudah dibuat, dan formula(A7==K7) ? "" : "diff"
atau yang serupa dimasukkan, dan disalin-tempel.sumber
Pada baris perintah, saya akan memastikan saya menambahkan baris baru yang bijaksana sebelum membandingkan file. Anda dapat menggunakan sed, awk, perl atau apa pun untuk menambahkan jeda baris dengan cara sistematis - pastikan untuk tidak menambahkan terlalu banyak.
Tapi saya menemukan yang terbaik adalah menggunakan vim karena menyoroti perbedaan kata. vim baik jika tidak terlalu banyak perbedaan dan perbedaannya sederhana.
sumber
kdiff3 menjadi penampil diff GUI standar di Linux. Ini mirip dengan xxdiff , tapi saya pikir kdiff3 lebih baik. Itu melakukan banyak hal dengan baik, termasuk permintaan Anda untuk menunjukkan "perbedaan karakter yang tepat antara dua baris dalam file tertentu".
sumber
Jika saya membaca pertanyaan Anda dengan benar, saya gunakan
diff -y
untuk hal semacam ini.Itu membuat membandingkan perbandingan berdampingan jauh lebih mudah untuk menemukan garis mana yang melempar perbedaan.
sumber
Saya memiliki masalah yang sama dan menyelesaikannya dengan PHP Fine Diff , alat online yang memungkinkan Anda menentukan rincian. Saya tahu ini bukan alat * nix secara teknis, tetapi saya tidak benar-benar ingin mengunduh program hanya untuk melakukan satu kali, tingkat karakter berbeda.
sumber