Diff adalah alat yang hebat untuk menampilkan perubahan antara dua file. Tetapi bagaimana cara menampilkan kesamaan dari dua file teks (sambil mengabaikan perbedaannya)?
Yaitu input sampel:
a:
Foo Bar
X
Hello
World
42
b:
Foo Baz
Hello
World
23
Output semu (sesuatu seperti ini):
@@ 2,3
=Hello World
Menyortir kedua file dan menggunakan comm tidak cukup, karena dalam kasus itu informasi baris hilang.
command-line
shell
diff
maxschlepzig
sumber
sumber
...%df'$'\n''%<'...
... --unchanged-group-format="@@ %dn,%df%c'\012'%<" ...
(Perhatikan tanda kutip ganda.)which diff
untuk melihat apakah ini masalah Anda.-F
berarti mencocokkan string biasa (bukan regexps),-x
berarti hanya pencocokan seluruh baris,-f
berarti mengambil 'pola' (yaitu baris) dari file yang dinamai argumennyasumber
-f
dan-F
dipertukarkan? Setidaknya dalamgrep
versi saya seperti itu. Saya perlu memberikanfile2
masukan untuk-f
argumen, seperticat file1 | grep -Fxf file2
, dan kemudian berfungsi.comm
dapat digunakan.man comm
untuk semua opsi tetapi Anda ingin menggunakannyacomm -12 ...
untuk hanya menampilkan garis yang ada di kedua input.Seperti yang telah ditunjukkan orang, Anda harus mengirimkan masukan
sort
terlebih dahulu.sumber
Saya tidak berpikir ada satu perintah yang melakukan apa yang Anda inginkan. Anda dapat mencoba menggabungkan output
diff
dengangrep
. Jika file teks Anda tidak ada karakter mengandung|
,<
,>
, berikut ini memberikan output yang agak berguna:sumber
diff --width=155 --left-column --side-by-side a b | grep -n -v '|' | sed 's/ *($//'
Dick Grune menulis sekumpulan alat untuk hal semacam ini:
http://dickgrune.com/Programs/similarity_tester/
Ada versi yang menguraikan sintaks berbagai bahasa, sehingga hal-hal seperti variabel yang diubah namanya dapat dilihat sebagai tidak berubah.
Dikemas seperti
similarity-tester
di Debian dan Ubuntu.sumber