2013-08-26 4 views
2

나는 내가 만든 루비 스크립트에 의해 만들어진 fasta 파일을 가지고있다. 그러나, 다른 순서 ID의 아래에 중복 된 시퀀스의 번호를 가지고 있는데이 파일 FASTA ... 입력에fasta 파일을 평평하게하기

데이터를 나는이에서 얻을 수 있도록 파일을 평평 할 (example.fa)

(출력 파일 - output.fa)이에
>isotig00009_f3.4.1 
ITLKPCGVPFSCCIPDQASGVANTQCGYGVRSPEQQNTFHTKIYTTGCADMFTMWINRYLYYIAGIAGVIVLVELFGFCFAHSLINDIKRQKARWAHR 
>isotig00037_f3.1.1 
KLSLIVVNHSMVASKFERVILAYTSIIIEVSPAKRRRNGKILRKNTIRFRWQTFRILSAFTVVTFSKMMTQKI 
>isotig00045_f1.15.3 
YKINKRP 
>isotig00046_f3.15.3 
YKINKRP 
>isotig00047_f3.15.3 
YKINKRP 
>isotig00048_f1.15.3 
YKINKRP 
>isotig00049_f1.15.3 
YKINKRP 
>isotig00050_f2.15.3 
YKINKRP 
>isotig00051_f1.15.3 
YKINKRP 

나는 꽤 많은 시간 동안 노력에도 불구하고 시퀀스의 사본 만을 취 작은 스크립트를 만들었습니다

>isotig00009_f3.4.1 
ITLKPCGVPFSCCIPDQASGVANTQCGYGVRSPEQQNTFHTKIYTTGCADMFTMWINRYLYYIAGIAGVIVLVELFGFCFAHSLINDIKRQKARWAHR 
>isotig00037_f3.1.1 
KLSLIVVNHSMVASKFERVILAYTSIIIEVSPAKRRRNGKILRKNTIRFRWQTFRILSAFTVVTFSKMMTQKI 
>isotig00045_f1.15.3 : isotig00046_f3.15.3 : isotig00047_f3.15.3 : isotig00048_f1.15.3 : isotig00049_f1.15.3 : isotig00050_f2.15.3 : isotig00051_f1.15.3 
YKINKRP 

..., 나는 것 각 시퀀스에 대한 seq ID를 추가 할 수 없습니다.

#!/usr/bin/env ruby 

filename = "./example.fa" 
text = File.read(filename) 

def seq_uniq(input, output) 
    parser = /^>.*\n(.*)/i 
    seq_id_parser = /^(>.*)\n(.*)/i 
    file = File.new("#{output}", "w") 
    input.scan(parser).uniq.each do |seq| 
     file.puts seq 
#  input.scan(seq_id_parser) do |seq_id, seq_actual| 
#   if seq_actual == seq 
#    file.puts seq_id 
#   end 
#  end 
    end 
    file.close 
end 


seq_uniq(text, "./output.fa") 
: 나는 작업 (아래 주석 부분 참조)하지 않았다하려 한 것은, 여기

내가 사용하고있는 스크립트입니다 ... sequence_IDs를 꺼내 다음 시도하고 고유 한 시퀀스를 추출하는 것이 었습니다

누군가가 올바른 방향으로 나를 가리킬 수 있다면 매우 감사하게 생각합니다. 이것은 HTML 웹 페이지를 생성하는 대형 루비 스크립트에 포함 할 필요가 있기 때문에, 당신은 루비를 사용하는 경우 매우 감사 (또는 것

편집 :

난에 FASTA 파일을 평평하게 할 명확히하려면 . :)으로 구분 한 줄 (에 같은 순서를 식별 ID를 모든 서열을 넣고 그 다음 줄에 순서가있다.

많은 감사

+0

은'ruby' 태그 : 다음과 같은 출력을 얻을해야 샘플 입력에

def uniq_sequences(input) ids_by_sequence = {} input.split(/\n/).each_slice(2) do |id, sequence| id = id.gsub(/^>\s*/,'') # Remove the leading ">". ids_by_sequence[sequence] = [] unless ids_by_sequence[sequence] ids_by_sequence[sequence] << id # Store all ids with the same sequence. end # Return a string of aggregated ids per same sequence. ids_by_sequence.map do |sequence, ids| ">#{ids.join(' : ')}\n#{sequence}" end.join("\n") end puts uniq_sequences(File.read('./example.fa')) 

: 다음 여러가있는 경우 라인, 당신은 파서를 개선해야합니다 루비에게. 'dna' 보석이 당신의 파싱에 도움이 될지 모르겠습니다 - https://github.com/audy/dna? –

+0

샘플 출력으로 무엇을 말하려고합니까 (this ... to this ...)? (예 : 동일한 출력을 가진 파일이 여러 개 있지만 파일 당 고유 한 출력을 원하십니까?) (추정 할 수있는) 파일 이름의 콜론으로 구분 된 구문이 혼란 스럽습니다. – maerics

+0

@maerics 아니요, 파일 이름이나 여러 파일을 다루는 것이 아닙니다. 대신 다루는 데이터는 fasta 파일 (example.fa)에 포함되어 있습니다. 일반적인 fasta 형식은 1 줄에 시퀀스 식별자가 있고 그 다음에 시퀀스가 ​​있습니다. 나는 또한 메인 포스트에서 이것을 분명히했다. 여기에 모든 Seq. 같은 seq를 가진 이드들. 1 줄에 (:)로 분리 한 다음 seq로 구분합니다. 다음에. –

답변

1

당신은 FASTA 파일을 읽고 해시를 만들 수 있습니다 "sequence => 동일한 순서의 ID 목록"이 있습니다.이 솔루션은 입력 파일이 각각에 대해 단일 ID 만 가지고 있다고 가정합니다 범위 답변을 일반적으로 충분하다

>isotig00009_f3.4.1 
ITLKPCGVPFSCCIPDQASGVANTQCGYGVRSPEQQNTFHTKIYTTGCADMFTMWINRYLYYIAGIAGVIVLVELFGFCFAHSLINDIKRQKARWAHR 
>isotig00037_f3.1.1 
KLSLIVVNHSMVASKFERVILAYTSIIIEVSPAKRRRNGKILRKNTIRFRWQTFRILSAFTVVTFSKMMTQKI 
>isotig00045_f1.15.3 : isotig00046_f3.15.3 : isotig00047_f3.15.3 : isotig00048_f1.15.3 : isotig00049_f1.15.3 : isotig00050_f2.15.3 : isotig00051_f1.15.3 
YKINKRP 
관련 문제