リストの新しいIDに従って、fastaファイルのseq IDを置き換えます。

リストの新しいIDに従って、fastaファイルのseq 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 =女性] [Unplacedscaffold]に置き換える必要があることを意味します。この目的のために、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

関連情報