как перенести строку из одного файла в другой системно в ruby?

у меня есть массив который я получаю из файла

urls = IO.readlines("man.txt")

далее в цикле делаю что то

urls.each do |url|
  url = urls.at(i)

   some code..
   
  # записываю в новый файл текущую строку
  File.open('url__success.txt', 'a+'){ |file| file.write urls.at(i) }
  # в конце пытаюсь удалить текущую строку и заменить пустой системно
  system("sed -e 's/^/\n/' man.txt")


end

я получаю

sed: -e expression #1, char 5: unterminated `s' command

хотя в чистом виде sed из консоли отрабатывает. любые другие варианты? также я не хочу чтобы url = urls.at(i) эти значения сбивались по ходу выполнения цикла


Ответы (1 шт):

Автор решения: Sergey Fedorov

Общая практика трансформации данных не подразумевает удаление обработанной строки из файла. После обработки источник либо уходит в архив, либо просто удаляется, поэтому вся работа с ним сводится к чтению, остальное просто неудобно, зачастую бессмысленно и вдобавок это большие накладные расходы, потому что придется перезаписывать файл при каждом удалении строки почти целиком и если все внезапно сломается, то ты рискуешь получить пустой файл источника).

Может быть таким способом ты хочешь отслеживать прогресс операции? Если да, то можно гораздо проще: итерируйся по строкам с индексом .each_with_index |row, idx| и печатай индекс в консоль. Значение индекса будет являться количеством обработанных строк и в случае падения скрипта ты можешь начать с последнего значения индекса .drop(567).each_with_index |val, idx|. В этом примере цикл пропустит 567 строк и начнет с 568.

→ Ссылка