2009-04-03 32 views
26

Tôi có hai tệp trong đó một số dòng đã thay đổi thứ tự. Tôi muốn có thể so sánh chúng.Cách dễ dàng để thực hiện sự khác biệt được sắp xếp giữa hai tệp là gì?

Một trang web gợi ý cái gì đó trông như thế này:

diff <(sort text2) <(sort text1) 

Nhưng điều này mang lại các lỗi: Thiếu tên cho chuyển hướng.

Tôi đang sử dụng tcsh. Là lệnh trên cho một vỏ khác nhau?

Có cách nào tốt hơn không?

+2

Một số shell (zsh chắc chắn, bash có thể) làm phép thuật này cho phép đầu ra của lệnh xuất hiện dưới dạng tên tệp thành lệnh khác bằng thiết bị/dev/fd . – vrdhn

+2

http://tldp.org/LDP/abs/html/process-sub.html – vrdhn

Trả lời

39

chuyển hướng này là bash cụ thể. Vì vậy nó sẽ không hoạt động trong tcsh.

Bạn có thể gọi bash và chỉ định lệnh trực tiếp:

bash -c 'diff <(sort text2) <(sort text1)' 
+0

Đây là một mẹo tuyệt vời, nhưng tôi hoàn toàn không hiểu tại sao nó hoạt động. Bạn có thể giải thích làm thế nào gói nó với "bash -c" làm cho chuyển hướng làm việc? – rooskie

+0

@rooskie: tốt hơn? –

+1

+1 tốt đẹp, nhanh chóng, to-the-point –

1

Sự cố với 'khác biệt' được đăng của bạn là diff chỉ có thể nhận được một tệp qua stdin. Vì vậy, tôi nghĩ bạn sẽ phải viết ít nhất một tệp được sắp xếp vào một tệp tạm thời.

diff - file.txt 

sẽ khác stdin so với tệp.txt. '-' đại diện cho stdin

EDIT: Tôi giả định rằng quá trình thay thế sẽ hoạt động thông qua stdin. Nhưng đó không phải là trường hợp và ở trên là đi qua /dev/fd/{num} như chỉ ra bởi VardhanDotNet ở trên.

3

Nếu điều này không làm việc cho shell của bạn, chỉ cần làm điều đó trong 3 dòng: cú pháp

sort text1 > text1.sorted 
sort text2 > text2.sorted 
diff text1.sorted text2.sorted 

Đơn giản nhưng nên làm việc ...

10

Dưới đây là một chức năng cho nó:

function diffs() { 
     diff "${@:3}" <(sort "$1") <(sort "$2") 
} 

Gọi nó như thế này:

diffs file1 file2 [other diff args, e.g. -y] 

Có lẽ bạn có thể thay đổi nó theo câu trả lời của David Schmitt nếu cần thiết.

+3

Tôi thích cái này! my .bashrc. Đó là một phép lạ không ai khác đã upvoted này được nêu ra. – refi64

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