nếu bạn có Ruby (1.9+)
#!/usr/bin/env ruby
b=File.read("file2").split
open("file1").each do |x|
x.chomp!
puts x if !b.include?(x)
end
Trong đó có độ phức tạp O (N ^ 2). Nếu bạn muốn quan tâm đến hiệu suất, đây là một phiên bản khác
b=File.read("file2").split
a=File.read("file1").split
(a-b).each {|x| puts x}
sử dụng một hàm băm để thực hiện phép trừ, độ phức tạp O (n) (kích thước của a) + O (n) (kích thước của b) cũng vậy
đây là một điểm chuẩn nhỏ, được sự cho phép của người dùng576875, nhưng với 100K dòng, ở trên:
$ for i in $(seq 1 100000); do echo "$i"; done|sort --random-sort > file1
$ for i in $(seq 1 2 100000); do echo "$i"; done|sort --random-sort > file2
$ time ruby test.rb > ruby.test
real 0m0.639s
user 0m0.554s
sys 0m0.021s
$time sort file1 file2|uniq -u > sort.test
real 0m2.311s
user 0m1.959s
sys 0m0.040s
$ diff <(sort -n ruby.test) <(sort -n sort.test)
$
diff
được sử dụng để cho thấy không có sự khác biệt giữa 2 tệp được tạo.