Có một định dạng khác biệt ngưng tụ bên cạnh?


40

Tôi có hai tệp nhật ký với hàng ngàn dòng. Sau khi xử lý trước, chỉ một số dòng khác nhau. Những dòng còn lại là sự khác biệt thực sự, hoặc các nhóm dòng bị xáo trộn.

Khác biệt thống nhất cho phép tôi thấy sự khác biệt chi tiết, nhưng nó làm cho việc so sánh thủ công với nhãn cầu khó khăn. Khác biệt bên cạnh có vẻ hữu ích hơn để so sánh, nhưng nó cũng thêm hàng ngàn dòng không thay đổi. Có cách nào để có được lợi thế của cả hai thế giới?

Lưu ý, các tệp nhật ký này được tạo bởi xscopeđó là chương trình theo dõi dữ liệu giao thức Xorg. Tôi đang tìm kiếm các công cụ đa năng có thể được áp dụng cho các tình huống tương tự như trên, không phải là các công cụ phân tích nhật ký truy cập máy chủ chuyên dụng chẳng hạn.


Hai tệp nhật ký mẫu có sẵn tại http://lekensteyn.nl/files/qemu-sdl-debug/ ( log13log14). Một lệnh tiền xử lý có thể được tìm thấy trong xscope-filtertệp loại bỏ dấu thời gian và các chi tiết nhỏ khác.


2
Bạn diff--suppress-common-lineslựa chọn không? pastebin.com/KZrVCNFR
manatwork

1
@manatwork Đẹp, nó làm. Bất kỳ cách nào để thêm nhiều ngữ cảnh (ví dụ số dòng)?
Lekensteyn

5
Sau đó, có thể vimdiff(từ gói vim ) sẽ phục vụ nhu cầu của bạn tốt hơn: hiển thị song song, tô màu, các đường chung được gấp lại. Số dòng có thể được bật với :set number.
manatwork

Tôi nghĩ bạn nên đặt vimdiff lên như một câu trả lời :)
Kotte

1
Các công cụ CLI được ưa thích, nhưng các công cụ GUI cũng được cho phép nếu chúng đủ nhỏ. Tôi đã thử kdiff3, nhưng nó vẫn được sản xuất nhiều chi tiết. Lý tưởng nhất, tôi không thấy tất cả các chi tiết không cần thiết. Tôi sẽ đính kèm hai bộ dữ liệu.
Lekensteyn

Câu trả lời:


37

Hai công cụ khác tôi sử dụng nhiều nhất sẽ là meldsdiff .

meld

Meld là một GUI nhưng làm rất tốt trong việc hiển thị các khác biệt giữa các tệp. Nó hướng đến phát triển phần mềm nhiều hơn với các tính năng như khả năng di chuyển các thay đổi từ bên này sang bên kia để hợp nhất các thay đổi nhưng có thể được sử dụng như một công cụ khuếch tán song song.

    ss của meld

    ss của mã tô sáng

sdiff

Tôi đã sử dụng công cụ này trong nhiều năm. Tôi thường chạy nó với các công tắc sau:

$ sdiff -bBWs file1 file2
  • -b Bỏ qua những thay đổi về số lượng khoảng trắng.
  • -W Bỏ qua tất cả khoảng trắng.
  • -B Bỏ qua những thay đổi mà các dòng đều trống.
  • -s Không xuất các dòng chung.

Thông thường với các tệp nhật ký bạn sẽ cần làm cho chiều rộng của các cột rộng hơn, bạn có thể sử dụng -w <num>để làm cho màn hình rộng hơn.

các công cụ khác mà tôi sử dụng tắt và bật

khác biệt

Diffc là một kịch bản python tô màu đầu ra khác biệt thống nhất.

$ diffc [OPTION] FILE1 FILE2

             ss của diffc

vimdiff

Vimdiff có lẽ là tốt nếu không tốt hơn meld và nó có thể được chạy từ một thiết bị đầu cuối. Tôi luôn quên sử dụng nó mặc dù, với tôi, đó là một chỉ báo tốt cho thấy tôi thấy công cụ này hơi khó sử dụng hàng ngày. Nhưng YMMV.

                                    ss của vimdiff


1
Một tính năng tuyệt vời của Meld, tiếc là không hiển thị trên ảnh chụp màn hình của bạn, là tô sáng cú pháp của các tệp mã nguồn.
manatwork

Vâng. Tôi đã từng sử dụng vimdiff mọi lúc, tôi đã chuyển sang sử dụng meld, tôi thấy nó dễ sử dụng hơn và nó dễ dàng hơn để xem những gì nó nói với tôi so với vimdiff.
slm

@manatwork - đã thêm liên kết của bạn vào câu trả lời, cảm ơn vì đã phản hồi!
slm

1
Có vẻ tuyệt vời cho mã nguồn, nhưng không quá nhiều để so sánh các tệp nhật ký. Tôi thường sử dụng colordifftừ colordiff.org cho tập tin nguồn. Theo hiểu biết của tôi, sdifftương tự như diff -ykhông có sự khác biệt trong đầu ra nhưng các tùy chọn hơi khác nhau. +1 để hiển thị một số lựa chọn thay thế tốt cho diff diff.
Lekensteyn

Tôi chưa bao giờ sử dụng colordiff, tôi sẽ phải kiểm tra nó. Bạn đã đúng về diff -y. Việc bổ sung công tắc đó diffdường như đã xảy ra vào một lúc nào đó, hoặc tôi không bao giờ nhận thấy điều đó. Ngoài ra đây là một liên kết đến trang tài nguyên công cụ khác biệt gnu . Công cụ tốt để sử dụng bộ công cụ này.
slm

20

Hiện tại tôi đang sử dụng diff-by-side diff với grep lọc các dòng khác nhau:

diff -y -W250 log.txt log2.txt | expand | \
    grep -E -C3 '^.{123} [|<>]( |$)' | colordiff | less -rS
  • Tùy chọn -W250làm cho đầu ra rộng hơn để tôi có thể xem thêm dữ liệu.
  • expand là cần thiết để chuyển đổi các tab thành không gian
  • -C3 thêm 3 dòng ngữ cảnh vào đầu ra grep.
  • ^.{123} khớp với một nửa dữ liệu trước các điểm khác biệt song song.
  • colordiff làm cho đầu ra đẹp hơn để làm theo
  • less -rScho phép các màu ANSI được diễn giải ( -r) và ngăn các dòng được bọc ( -S).

Đây là một hack, lựa chọn thay thế được chào đón.


1
Đây là điều tuyệt vời.
Pat Myron

Ý kiến ​​hay. Thật không may, grepregex quá chậm. Cũng diffcó một -ttùy chọn để mở rộng các tab.
Timmmm


0

Lệnh "sdiff" linux hiển thị các khác biệt cạnh nhau, theo mặc định bao gồm tất cả các dòng, nhưng bạn có thể sử dụng các tùy chọn khác nhau để chỉ hiển thị các khác biệt:

sdiff -tWBs -w $COLUMNS config.xml config.xml.original

Ở đâu

-t: dịch các tab sang dấu cách

-W: bỏ qua sự khác biệt về khoảng trắng

-B: bỏ qua các dòng trống

-s: bỏ qua các dòng giống nhau

-w $ COLUMNS: sử dụng toàn bộ chiều rộng của màn hình

Các dòng hiển thị sẽ được chia cho |, <hoặc> - xem tài liệu hoặc chỉ thử nó.

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.