#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, чтобы получить обратное дополнение последовательности.