2016-06-19 2 views
-2

이 시퀀스가 ​​시퀀스의 시작 또는 끝 부분에 있다는 것을 고려하여 fasta (정렬) 파일에서 char (n) 반복을 계산하는 방법을 찾으려고합니다. 시퀀스 내부의 문자를 무시합니다.fasta (정렬) 파일의 문자 수

예 :

입력 : 제가

awk '{print gsub (srch,srch)}' srch="n" 
으로 전체 시퀀스에 얼마나 많은 문자 (N)을 카운트 할 수 이때

>chromosome1 
============ 
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
TGTGAAGATGCTGGAGGAAACAGGTAnnCAAAAGTATCTATATCCACAGTAAAACAAGTCCTATATTGACAT 
CCTGAAAGGCCTCTCAGCAAGGAAGAAGCCACTGCTCCAAAACCGCCAnnnTAAAAAAGCCAGACTACGGTT 
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn. 

출력

71 
74 

하지만 ID가 필요합니다. ea (코드)를 사용하여 큰 블록 앞과 뒤의 두 그룹을 구별합니다.

+1

[편집] 당신의 게시 샘플 입력 주어진 예상 출력을 포함하는 질문 . –

답변

0

당신이 다음 012 전에 >header과 마지막 줄 후 첫 선을 원하는 경우또는 파일의 끝 (나는 ============ 라인은 실제로 데이터의 일부가 아닌 가정 하였다.)

awk '/^>/ { if (FNR>1) print n; n=0; p=1; next } 
{ n=gsub("n", "n") } 
p { print n; p=0 } 
END { print n }' file.fasta 

같은 것을 시도

+0

고마워. 그것이 내가 찾고 있었던 것이다. – Babi

+0

[help]에 요약 된대로 upvoting 및/또는 수락을 고려하십시오. http://stackoverflow.com/help/someone-answers – tripleee

0

그냥 awk로 다음 스크립트를 사용할 수 있습니다. 그것은 마지막에 발견 된 첫 번째와 마지막 시퀀스의 길이를 모두 srch의 순서 및 인쇄의 길이를 계산합니다 :이 같은

# count.awk 
BEGIN { 
    FS="" 
    n=0 
} 

NR > 2 { 
    for(i=1; i<=NF; i++) { 
     # Increment current group if current character equals srch 
     if($i == srch) { 
      grp[n]++ 
     } else { 
      # Next group 
      n++ 
      # Next character 
      i++ 
      # Iterate trough line until next sequence of srch 
      while($i != srch && i <= NF) { 
       i++ 
       # The next sequence starts 
       if ($i == srch) { 
        grp[n]++ 
        break 
       } 
      } 
     } 
    } 
} 
END { 
    print "Begin: ", grp[0] 
    print "End: ", grp[n-1] 
} 

전화를 : 나는 오히려 막연한이 질문을 찾을

awk -v srch=n -f count.awk input.fasta 
+0

감사합니다 hek2mgl,하지만 난 파일에 n의 전체 번호에 대한 결과를 원하지 않아. 나는 끝 부분에있는 그들과 시작 부분에있는 부분을 분리 할 필요가있다. 또한 그것을 무시하고, 그것은 블록 내부에 있습니다. – Babi

+0

@Babi 첫 번째 'n'은 항상 첫 번째 줄에 있고 마지막 'n'은 항상 마지막 줄에 있습니까? – hek2mgl

+0

아니요.이 예에서와 같습니다. 다른 파일에서 나는 다른 수의 n을 가지며 한 줄 이상을 길게 만들 수 있습니다. 또한 파일을 한 줄로 변환하고 n 다음에 쉼표를 삽입하는 것으로 생각했지만 블록 내부에도 작은 결과가 포함됩니다. – Babi

0

, 그러나이 awk 스크립트는 도움이 될 수 있습니다 :

/^n+\.$/ { print "after: " length($0) - 1; next; } 
/^n+$/ { print "before: " length($0) } 
관련 문제