複数のヘッダーを持つファイルを1つにリンクする方法

複数のヘッダーを持つファイルを1つにリンクする方法

これを組み合わせる方法を提案できますか?

a.fastaには、ヘッダー1、2、3、....を含む10000個のシーケンスがあります。 10000 ............. ヘッダーヘッダーが 1 つだけ含まれています。例えば

>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

ただし、これらのファイルを使用するには、これらの2つのスクリプトを$ PATH($HOME/bin例:)のファイルに保存して実行可能にすることをお勧めします(chmod a+x $HOME/bin/scriptname)。

Tblをすばやく変換

このスクリプトはfastaファイルをインポートしてtbl形式に変更します(fastaヘッダー、タブ、およびシーケンスはすべて1行にあります)。

#! /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ファイル(>タイトルと1行につき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ヘッダーをインポートするだけです。アルファベット以外のすべての文字を削除すると、自動的に目的の結果が表示されます。

関連情報