リストの新しいIDに基づいてFastaファイルのシーケンスIDを置き換える

リストの新しいIDに基づいてFastaファイルのシーケンスIDを置き換える

fasta ファイルがあり、seq ID (説明行) を新しい拡張 ID に置き換えたいと考えています。 fasta ファイルの形式は次のとおりです。

>3C-assembly|contig_74
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>3C-assembly|contig_75
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>3C-assembly|contig_76
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
...................

次の形式で新しい fasta を実現したいと考えています。

>Scaffold_001 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>Scaffold_002 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>Scaffold_003 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
....................

つまり、たとえば、3C-assembly|contig_74 は、Scaffold_001 [Sex=Female] [Unplaced scaffold] に置き換えられることになります。この目的のために、私はこれら 2 つの IDS を接続する 2 つの列 (タブ区切り) を含むテキスト ファイルを作成しました。

3C-assembly|contig_74   Scaffold_001 [Sex=Female] [Unplaced scaffold]
3C-assembly|contig_75   Scaffold_002 [Sex=Female] [Unplaced scaffold]
3C-assembly|contig_76   Scaffold_003 [Sex=Female] [Unplaced scaffold]
......................

このテキストファイルを使用して fasta ファイル内の ID を置き換える方法をご存知ですか。ありがとうございます。

答え1

使用方法awk:

awk -F'\t' '
  NR==FNR{ a[$1]=$2; next }
  /^>/{ 
    id=a[substr($0, 2)]
    if (id!=""){ print ">" id; next }
  }
  1
' textfile file.fasta

まず、マッピングを含むテキスト ファイルを読み取り、a最初のフィールドをインデックスとして使用して、配列の 2 番目のフィールドを保存します。nextレコードにスキップします。

次に fasta ファイルを読み取ります。レコードが で始まる場合は、現在のレコード ( )>から最初の文字を削除し、この値を配列インデックスとして使用して、配列から新しい ID を検索します。ID が空でない場合は、ID を出力し、レコードにスキップします。substr($0, 2)
>next

1現在のレコード (シーケンスまたは一致しない ID) を出力します。

答え2

awk -F'\t' '
    NR==FNR { map[">"$1] = ">"$2; next }
    $0 in map { $0 = map[$0] }
    { print }
' mapfile fastafile

関連情報