Где udev берет строки модели и поставщика?

OK ruby способ: если у вас есть список строк в файле, и вы хотите удалить все строки из другого файла, которые даже содержат любую строку в первом файле (в этом случае удаление "file2" из "file1") ruby файл:

b=File.read("file2").split # subtract this one out
remove_regex = Regexp.new(b.join('|'))
File.open("file1", "r").each_line do |line|
  if line !~ remove_regex
    puts line
  end
end

к сожалению, при большом файле "для удаления" это, кажется, ухудшается по сложности до O(N^2) (я предполагаю, что regexp должен сделать много работы), но все же может быть полезным для кого-то там (если вы хотите больше, чем удаление полных строк). В некоторых случаях это может быть быстрее.

Другой вариант, если вам нужна скорость, - использовать тот же механизм проверки хэша, но тщательно "разбирать" строку на предмет строк, которые могут совпасть, а затем сравнивать их с вашим хэшем.

На языке ruby это может выглядеть так:

b=File.read("file2").split # subtract this one out
hash={}
for line in b
  hash[line] = 1
end

ARGF.each_line do |line|
  ok = true
  for number in line.scan(/\d{9}/)
    if hash.key? number
      ok=false
    end
  end
  if (ok)
    puts line
  end
end

Смотрите также ответ Скотта, он похож на ответы awk, предложенные на сайте hither thither, и позволяет избежать сложности O(N^2) (фух).

1
25.05.2018, 10:40
0 ответов

Теги

Похожие вопросы