Я использую сценарий Ruby, чтобы выполнить множество манипуляций и очистки, чтобы получить этот и кучу других файлов, готовых к импорту.
У меня есть действительно большой файл с некоторыми данными, которые я пытаюсь импортировать в базу данных. Есть некоторые проблемы с данными, когда символы новой строки находятся в данных там, где их быть не должно, что мешает импорту.
Я смог решить эту проблему с помощью sed, используя это:
sed -i '.original' -e ':a' -e 'N' -e '$!ba' -e 's/Oversight Bd\n/Oversight Bd/g' -e 's/Sciences\n/Sciences/g' combined_old_individual.txt"
Однако я не могу вызвать эту команду из скрипта Ruby, потому что Ruby искажает интерпретацию символов новой строки и не запускает эту команду. sed нуждается в неэкранированном символе новой строки, но при вызове системной команды из Ruby ему нужна строка, в которой необходимо экранировать символ новой строки.
Я также пытался сделать это с помощью метода файла Ruby, но он тоже не работает:
File.open("combined_old_individual.txt", "r") do |f|
File.open("combined_old_individual_new.txt","w") do |new_file|
to_combine = nil
f.each_line do |line|
if(/Oversight Bd$/ =~ line || /Sciences$/ =~ line)
to_combine = line
else
if to_combine.nil?
new_file.puts line
else
combined_line = to_combine + line
new_file.puts combined_line
to_combine = nil
end
end
end
end
end
Любые идеи, как я могу соединить строки, где первая строка заканчивается на «Bd» или «Sciences», из скрипта Ruby, были бы очень полезны.
Вот пример того, что может быть в testfile.txt:
random line
Oversight Bd
should be on the same line as the above, but isn't
last line
и результат должен быть
random line
Oversight Bdshould be on the same line as the above, but isn't
last line
ruby
, но похоже, что вы можете напечатать строку без новой строки, используя методprint
вместоputs
: stackoverflow.com/questions/8723120/, stackoverflow.com/questions/5080644/ - person Digital Trauma   schedule 20.01.2014some_pattern\n
напрямую, но должны использовать командуN
после сопоставленияsome_pattern
, чтобы получить новую строку и следующую строку в буфере. - person wich   schedule 22.01.2014