So sánh hai tệp theo từng dòng một cách nghiêm ngặt, không chèn hoặc xóa


13

Tôi có hai tệp về cơ bản chứa một bãi chứa bộ nhớ ở định dạng hex. Hiện tại tôi sử dụng diff để xem các tập tin có khác nhau không và sự khác biệt ở đâu. Tuy nhiên, điều này có thể gây hiểu nhầm khi cố gắng xác định vị trí chính xác (tức là địa chỉ bộ nhớ) của sự khác biệt. Xem xét ví dụ sau đây cho thấy hai tệp cạnh nhau.

file1:       file2:

0001    |    0001
ABCD    |    FFFF
1234    |    ABCD
FFFF    |    1234

Bây giờ diff -usẽ hiển thị một lần chèn và một lần xóa, mặc dù 3 dòng (vị trí bộ nhớ) đã thay đổi giữa hai tệp:

 0001
+FFFF
 ABCD
 1234
-FFFF

Có cách nào dễ dàng để so sánh hai tệp sao cho mỗi dòng chỉ được so sánh với cùng một dòng (về mặt đánh số dòng) trong tệp khác không? Vì vậy, trong ví dụ này cần báo cáo rằng 3 dòng cuối cùng đã thay đổi, cùng với các dòng thay đổi từ file1file2. Đầu ra không phải là kiểu khác, nhưng sẽ rất tuyệt nếu nó có thể được tô màu (tại thời điểm tôi tô màu diff -uđầu ra bằng cách sử dụng sedđể có thể dễ dàng điều chỉnh).

Câu trả lời:


18

Đây có thể là một cách tiếp cận:

diff <(nl file1) <(nl file2)

Với nlsố lượng các dòng diffnhận ra các dòng theo dòng.


3
Thật tuyệt, tôi không biết chương trình nl. Những công cụ unix này thực sự tiện dụng, nhưng có rất nhiều trong số chúng.
Fritz

1
Tôi vừa thử điều này, và thật không may những gì tôi nhận được là: mọi dòng của tệp đầu tiên, theo sau là mỗi dòng của tệp thứ hai ... thay vì dòng 1 từ tệp 1, tiếp theo là dòng 1 từ tệp hai, tiếp theo là dòng 2 từ tệp một, tiếp theo là dòng 2 từ tệp 2 ...
Michael Hewson

@MichaelHewson Có vẻ như hai tệp của bạn không có dòng chung. Trong trường hợp đó, đó chỉ là cách diffhoạt động. Bạn có thể thử chương trình gui meldhiển thị hai tệp cạnh nhau. Như trongmeld <(nl file1) <(nl file2)
Fritz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.