헤더가 여러 개인 파일을 하나로 연결하는 방법

헤더가 여러 개인 파일을 하나로 연결하는 방법

이것을 결합하는 방법을 제안해 주실 수 있나요?

a.fasta에는 헤더 1, 2, 3, ....을 포함하는 10000개의 시퀀스가 ​​있습니다. 10000 ............. 헤더 헤더가 하나만 포함되어 있습니다. 예를 들어

>1
AAATTTTGGGGCCC
>2
ACCCCGGGTTT
..........
>10000
ATGCCCCCCCCCC

산출:

>1
AAATTTTGGGGCCCACCCCGGGTTTATGCCCCCCCCCC

답변1

awk '
    /^>/ { 
        # print the first header
        if (c++ == 0) {print; print ""} 
        next
    } 
    /^$/ {next} 
    {printf "%s", $0} 
    END {print ""}
' a.fasta > b.fasta

b.fasta의 내용

>1

AAATTTTGGGGCCCACCCCGGGTTT..........ATGCCCCCCCCCC

답변2

가장 간단한 방법은 첫 번째 줄만 인쇄한 다음 >i) 공백 문자(fasta 파일과 관련 없음) 및 ii) fasta 헤더 줄( )을 포함하지 않는 파일의 다른 모든 줄을 인쇄하는 것입니다.

head -n 1 file.fa > newfile.fa; grep -P '^[^> ]+$' >>  newfile.fa

첫 번째 줄이 인쇄되고 grep 정규식은 줄의 시작 부분( )부터 끝 부분( )까지 head문자나 공백이 아닌 문자( )만 포함하는 모든 줄을 찾습니다 .>[^> ]^$

그러나 이렇게 하면 다음과 같은 파일이 생성됩니다.

>1
AAATTTTGGGGCCC
ACCCCGGGTTT
ATGCCCCCCCCCC

전체 시퀀스를 같은 줄에 넣으려면 다음 명령을 사용하십시오.

head -n 1 file.fa > newfile.fa; grep -P '^[^> ]+$' | tr -d '\n'>>  newfile.fa; 

그런 다음 다음을 사용하여 파일 끝에 추가 줄 바꿈을 추가할 수 있습니다.

echo "" >> newfile.fa

그러나 이러한 파일을 사용하려면 이 두 스크립트를 $PATH( $HOME/bin예:)의 파일에 저장하고 실행 가능하게 만드는 것이 좋습니다( chmod a+x $HOME/bin/scriptname).

Tbl을 빠르게 변환하세요

이 스크립트는 fasta 파일을 가져와서 tbl 형식으로 변경합니다(fasta 헤더, 탭 및 시퀀스가 ​​모두 한 줄에 있음).

#! /bin/sh
gawk '{
        if (substr($1,1,1)==">")
        if (NR>1)
                    printf "\n%s\t", substr($0,2,length($0)-1)
        else 
            printf "%s\t", substr($0,2,length($0)-1)
        else 
                printf "%s", $0
}END{printf "\n"}'  "$@"

TblToFasta

반면에 이 파일은 tbl 형식의 파일을 받아 적절한 fasta 파일( >제목 및 줄당 60자)로 변환합니다.

#! /bin/sh

gawk '{
  sequence=$NF

  ls = length(sequence)
  is = 1
  fld  = 1

# if (fld == 1){printf ">"}
  
  while (fld < NF)
  {
     if (fld == 1){printf ">"}
     printf "%s " , $fld
    
     if (fld == NF-1)
      {
        printf "\n"
      }
      fld = fld+1
  }
  
  while (is <= ls)
  {
    printf "%s\n", substr(sequence,is,60)
    is=is+60
  }
}' "$@"

이제 이러한 스크립트를 사용할 수 있으면 다음 명령을 실행하여 원하는 작업을 수행할 수 있습니다.

$ head -n 1 file.fa; FastaToTbl file.fa | awk -F"\t" '{print $2}'
>1
AAATTTTGGGGCCC
ACCCCGGGTTT..........
ATGCCCCCCCCCC

또는 올바른 fasta 파일을 얻으려면:

 $ head -n 1 file.fa > newfile; FastaToTbl file.fa | 
    awk -F"\t" '{printf "%s", $2}' | TblToFasta >> newfile   

다음을 생성합니다.

>1
AAATTTTGGGGCCCACCCCGGGTTT..........ATGCCCCCCCCCC

답변3

{ echo '>1'; tr -dc '[:alpha:]'; } <infile >outfile

파일의 첫 번째 줄을 가져올 필요는 없습니다. echo헤더만 가져오면 됩니다. 알파벳 문자를 제외한 모든 문자를 제거하면 자동으로 원하는 결과가 나옵니다.

관련 정보