2013-08-05 31 views
15

Tôi muốn tìm sự khác biệt giữa hai tệp và sau đó chỉ đặt sự khác biệt trong tệp thứ ba. Tôi thấy các cách tiếp cận khác nhau bằng cách sử dụng awk, diff và comm. Còn nữa không?Cách nhanh nhất để tìm sự khác biệt giữa hai tệp trong unix?

ví dụ: Compare two files line by line and generate the difference in another file

ví dụ: Copy differences between two files in unix

tôi cần phải biết đó là cách nhanh nhất để tìm tất cả các sự khác biệt và liệt kê chúng trong một tập tin cho mỗi người trong số các trường hợp dưới đây -

Case 1 - file2 = file1 + extra text appended. 
Case 2 - file2 and file1 are different. 
+7

vì đây phụ thuộc vào đầu vào của bạn, nó tốt nhất là bạn hãy dành thời gian cho mình – perreal

+0

bạn có thể làm cho các trường hợp của bạn cụ thể hơn và có thể cung cấp một số mã mẫu của những thứ bạn đã thử không? – asf107

+1

Đối với trường hợp 2 có 'cmp' so sánh hai tệp byte theo byte. – micke

Trả lời

39

Bạn có thể thử ..

comm -13 <(sort file1) <(sort file2) > file3 

hoặc

grep -Fxvf file1 file2 > file3 

hoặc

diff file1 file2 | grep "<" | sed 's/^<//g' > file3 

hoặc

join -v 2 <(sort file1) <(sort file2) > file3 
+0

có, nhưng cái nào sẽ là nhanh nhất? – Steam

+1

Sử dụng hai tệp văn bản lớn, trong đó một tệp có thêm đoạn văn bản gần đầu, tôi đã hẹn giờ cả bốn phương pháp. Tất cả các phương thức grep, diff và join đều không tìm được đoạn phụ. Các phương thức khác cần grep ">" ngoài "<" để hoạt động. Tôi không quen với các phương thức grep hoặc join. Kết quả: comm: 3.661s, grep: 0.035s, diff: 0.051s, tham gia: 3.811s –

+1

@JasonHartley Có được một người bạn đời, chỉ có rất nhiều cách mà các lệnh đó có thể được viết. Ngoài ra câu trả lời bạn bỏ qua để có một lệnh mà tôi đã cung cấp một số. – danmc

1

Bạn cũng có thể cố gắng bao gồm md5-băm-tiền hoặc tương tự làm xác định xem có bất kỳ sự khác biệt nào cả. Sau đó, chỉ so sánh các tập tin mà có băm khác nhau ...

+0

Tôi làm như thế nào? – Steam

+0

Nhưng đang băm nhỏ hai tệp nhanh hơn so sánh hai tệp? –

8

Một tùy chọn khác:

sort file1 file2 | uniq -u > file3 

Nếu bạn muốn xem chỉ các mục trùng lặp sử dụng "uniq -d" tùy chọn:

sort file1 file2 | uniq -d > file3 
0

Thao tác này sẽ hoạt động nhanh:

Trường hợp 1 - File2 = File1 + văn bản bổ sung được thêm vào.

grep -Fxvf file2.txt file1.txt >> File3.txt

Tập 1: 80 Đường Tập 2: 100 Đường Tập 3: 20 Đường

Các vấn đề liên quan