2014-06-18 3 views
3

다음과 같은 파일이 있습니다. 각 캐릭터의 수를 계산하고 싶습니다.파일의 잔기 수를 계산하십시오.

>1DMLA 
MTDSPGGVAPASPVEDASDASLGQPEEGAPCQVVLQGAELNGILQAFAPLRTSLLDSLLVMGDRGILIHNTIFGEQVFLP 
LEHSQFSRYRWRGPTAAFLSLVDQKRSLLSVFRANQYPDLRRVELAITGQAPFRTLVQRIWTTTSDGEAVELASETLMKR 
ELTSFVVLVPQGTPDVQLRLTRPQLTKVLNATGADSATPTTFELGVNGKFSVFTTSTCVTFAAREEGVSSSTSTQVQILS 
NALTKAGQAAANAKTVYGENTHRTFSVVVDDCSMRAVLRRLQVGGGTLKFFLTTPVPSLCVTATGPNAVSAVFLLKPQK 
>1DMLB 
DDVAARLRAAGFGAVGAGATAEETRRMLHRAFDTLA 
>2BHDC 
MTDSPGGVAPASPVEDASDASLGQPEEGAPCQVVLQGAELNGILQAFAPLRTSLLDSLLVMGDRGILIHNTIFGEQVFLP 
LEHSQFSRYRWRGPTAAFLSLVDQKRSLLSVFRANQYPDLRRVELAITGQAPFRTLVQRIWTTTSDGEAVELASETLMKR 
ELTSFVVLVPQGTPDVQLRLTRPQLTKVLNATGADSATPTTFELGVNGKFSVFTTSTCVTFAAREEGVSSSTSTQVQILS 

나는 다음 코드를 시도했다.

awk '/^>/ { res=substr($0, 2); } /^[^>]/ { print res " - " length($0); }' <file 

위의 코드의 출력은

1DMLA - 80 
1DMLA - 80 
1DMLA - 80 
1DMLA - 79 
1DMLB - 36 
2BHDC - 80 
2BHDC - 80 
2BHDC - 80 

내 원하는 출력이 내가 원하는 출력을 얻기 위해 위의 코드를 변경하려면 어떻게

1DMLA - 319 
1DMLB - 36 
2BHDC - 240 

이다?

+0

최저 피하기 위해' Steve

+0

모든 솔루션을 테스트 했습니까? – klashxx

답변

0

여기 awk를 사용하여 하나의 방법

1DMLA - 319 
1DMLB - 36 
2BHDC - 240 
0

이 방법 : 형식

awk -F\> '/^>/ {if (seqlen != ""){print seqlen}printf("%s - ",$2);seqlen=0;next}seqlen != ""{seqlen +=length($0)}END{print seqlen}' infile 

또는 :

awk -F\> '/^>/ { if (seqlen != "") 
        print seqlen 
       printf("%s - ",$2) 
       seqlen=0 
       next } 
      seqlen != ""{seqlen+=length($0)} 
      END{ 
      print seqlen}' infile 

참조 : 예상 된 결과에서 제외하고 Sequence length of FASTA file

이 이러한 예기치 않은 파일 형식을 처리합니다.

awk '/^>/ && r { print r, "-", s; r=s="" } /^>/ { r = substr($0, 2); next } { s += length } END { print r, "-", s }' file 

결과 :

$ cat infile 
MTDSPGGVAPASPVEDASDASLGQPEEGAPCQVVLQGAELNGILQAFAPLRTSLLDSLLVMGDRGILIHNTIFGEQVFLP 
LEHSQFSRYRWRGPTAAFLSLVDQKRSLLSVFRANQYPDLRRVELAITGQAPFRTLVQRIWTTTSDGEAVELASETLMKR 
ELTSFVVLVPQGTPDVQLRLTRPQLTKVLNATGADSATPTTFELGVNGKFSVFTTSTCVTFAAREEGVSSSTSTQVQILS 
NALTKAGQAAANAKTVYGENTHRTFSVVVDDCSMRAVLRRLQVGGGTLKFFLTTPVPSLCVTATGPNAVSAVFLLKPQK 
>1DMLB 
>2BHDC 
MTDSPGGVAPASPVEDASDASLGQPEEGAPCQVVLQGAELNGILQAFAPLRTSLLDSLLVMGDRGILIHNTIFGEQVFLP 
LEHSQFSRYRWRGPTAAFLSLVDQKRSLLSVFRANQYPDLRRVELAITGQAPFRTLVQRIWTTTSDGEAVELASETLMKR 
ELTSFVVLVPQGTPDVQLRLTRPQLTKVLNATGADSATPTTFELGVNGKFSVFTTSTCVTFAAREEGVSSSTSTQVQILS 


$ awk -F\> '/^>/ {if (seqlen != ""){print seqlen}printf("%s - ",$2);seqlen=0;next}seqlen != ""{seqlen +=length($0)}END{print seqlen}' kk2 
1DMLB - 0 
2BHDC - 240 
0
awk -vRS='>' '$1{gsub("[\r]", "",$1); 
       printf "%s - %d\n", $1, length($0) - length($1) - NF + 1}' input 
+0

변경 사항에 대해 조금 더 자세히 설명해 주시겠습니까? –

관련 문제