si tiene Rubí (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
que tiene O (n^2) la complejidad. Si quieres que se preocupan por el rendimiento, aquí es otra versión
b=File.read("file2").split
a=File.read("file1").split
(a-b).each {|x| puts x}
que utiliza un hash para efectuar la sustracción, por lo que es la complejidad O (n) (tamaño de a) + O (n) (tamaño de b)
aquí hay un pequeño punto de referencia, cortesía de user576875, pero con líneas de 100K, de lo anterior:
$ 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
se utilizó para mostrar que no hay diferencias entre los 2 archivos generados.
posible duplicado de [Quitar líneas de archivos que aparecen en otro archivo] (http://stackoverflow.com/questions/4366533/remove-lines-from-file-which-appear-in-another-file) –
Si está buscando eliminar líneas de un archivo que "incluso contiene" cadenas de otro archivo (por ejemplo, coincidencias parciales), consulte http://unix.stackexchange.com/questions/145079/remove-all-lines-in- file-a-which-contain-the-strings-in-file-b – rogerdpack