2011-12-16 5 views
17

Tôi quen thuộc với các công cụ như tkDiff và WinMerge và biết cách xem sự khác biệt giữa hai tệp.Cách tạo ra sự khác biệt giữa hai tập tin (tốt nhất là sử dụng dòng lệnh)

Điều tôi đang làm là tạo báo cáo các phần tử trong một tệp không có trong tệp khác.

Ví dụ:

File1 chứa:

apple 
cool 
dude 
flan 

File2 chứa:

apple 
ball 
cool 
dude 
elephant 

Tôi muốn tạo ra một báo cáo có chứa:

ball 
elephant 

Hoặc, tốt hơn chưa, một báo cáo l ike này:

+ball 
+elephant 
-flan 

Có ai biết một công cụ có thể thực hiện việc này không? Tốt hơn với các tùy chọn dòng lệnh.

Tính năng báo cáo trong WinMerge không phải là quá xa những gì tôi muốn nhưng không có tùy chọn dòng lệnh để làm điều này (theo như tôi biết).

Xin cảm ơn trước.

Trả lời

20

Bạn có thể muốn Unix comm utility. Windows versions có trong GnuWin32

TÊN

comm - compare two sorted files line by line 

SYNOPSIS

comm [OPTION]... FILE1 FILE2 

MÔ TẢ

Compare sorted files FILE1 and FILE2 line by line. 

    With no options, produce three-column output. Column one contains 
    lines unique to FILE1, column two contains lines unique to FILE2, and 
    column three contains lines common to both files. 

    -1  suppress lines unique to FILE1 

    -2  suppress lines unique to FILE2 

    -3  suppress lines that appear in both files 
+0

Rất đẹp. Cám ơn vì cái này. Toàn bộ GnuWin32 là thứ mà tôi không biết và hoàn toàn là GOLD! Bằng cách sử dụng kết hợp -1 và -3, tôi đã có thể có được những gì tôi muốn. Xấu hổ không có + và - mặc dù nhưng tôi đoán tôi không nên quá tham lam. –

+1

Một chút công việc với sed (cũng có trong utils) sẽ cho phép bạn thêm +/- –

+1

NICE! Tôi đã phải làm một sự khác biệt giữa hai bộ dữ liệu, và so sánh 1,1 triệu hàng so với 8 triệu hàng sẽ mất quá nhiều thời gian. Tôi đã chuyển sang .CSV và đã sử dụng Cygwin: comm -2 -3 file1.csv file2.csv> out.csv Nó chạy trong 13 giây! –

29

Điều này có thể làm việc cho bạn (GNU diff):

diff -u file1 file2 | sed -n '1,2d;/^[-+]/p' 
+ball 
-flan 
+elephant 
+0

Tuyệt vời.Câu trả lời hay hơn, vì hoạt động trên các tệp chưa được phân loại. Sự bổ sung 'sed' của +/- là một liên lạc tốt đẹp (theo yêu cầu của câu hỏi gốc). –

-4

Để so sánh dữ liệu với dấu nhắc lệnh, bạn có thể sử dụng

COMP/A/l D: \ folder1 \ data.txt D: \ folder2 \ data.txt

Dưới đây là khác tùy chọn để compare files and folders with command prompt.

+1

Tôi không thấy câu trả lời này có liên quan đến câu hỏi như thế nào. – manWe

+0

Tôi không nhận được bất kỳ điều gì hữu ích từ nó: "Các tệp có kích thước khác nhau". Kết quả tôi nhận được từ [FC] (http://ss64.com/nt/fc.html) hữu ích hơn. – ofthelit