удаление повторяющейся последовательности

#ruby

#ruby

Вопрос:

Я новичок в Ruby, и мне нравятся некоторые указания, пожалуйста. У меня есть файл, содержащий многие из следующих:

Обновить:

   

?@??>=???>?>??>?>=9>>==?2>===<=>=== @IL9_2657:1:1:1:1217/1 

TTTTCCGTGCTTTTTTTTTCGGTTCGATCCCCTCTTT

  
  

Мне нужен скрипт, который будет указывать для каждого блока, содержащего от до , удалить блок, если последовательность имеет

 TTTTTTTTT.
  

Заранее спасибо.

Отметить

Ответ №1:

Это должно сделать:

 s = 'preceding_string  ?@??>=???>?>??>?>=9>>==?2>===<=>=== @IL9_2657:1:1:1:1217/1 TTTTCCGTGCTTTTTTTTTCGGTTCGATCCCCTCTTT  following_string'

s.gsub!(/ [^ ]*TTTTTTTTT[^ ]* /, '')
p s

# => "preceding_stringfollowing_string"
  

Ответ №2:

Сначала разделите ваши данные на массив. scan можно сделать это с помощью простого регулярного выражения. Затем вы можете удалить ненужные элементы с помощью reject! . Например:

 data = " x   y   TTTTTTTTT   z "

blocks = data.scan(/ [^ ]  /)
blocks.reject! { |b| b.include? "TTTTTTTTT" }

p blocks
# => [" x ", " y ", " z "]
  

Комментарии:

1. Спасибо, но это предполагает, что все они находятся в одной строке. Я обновил выше

Ответ №3:

 ruby -0777 -ne 'puts $_.split(/ /).reject{|x| x[/TTTTTTT/] }.join(" ")' file
  

Ответ №4:

Может ли последовательность содержать слишком много аденинов? Если это так, используйте bioruby, чтобы получить обратное дополнение последовательности.