如何将具有相同名称的fasta文件连接到一个具有不同headers的文件中?

How to concatenate fasta files with identical names into one file with different headers?

我的问题更多是关于如何为每个 fasta 序列重命名 header 行,因为我知道如何将一堆 fasta 文件连接成一个文件。问题是,在生成我的文件后,每个文件都具有完全相同的 header(所分析基因的名称)。所以我想做的只是组合序列,而不是保持相同的 header,我想使用文件名作为 header.

例如,我有两个 fasta 文件,第一个是:

Homo_sapien_XYZ_20102.fa

在这个文件中,顺序是:

>gene_X
ACTGAGGCCAATGAA...

然后是第二个文件:

Homo_sapein_ABC_20102.fa

>gene_X
CCCTGAGTAGAT...

当我连接这些文件时,我最终得到一个具有不同序列但相同 headers 的新文件(并且由于我用来生成这些单独序列的脚本的性质,我无法更改 header 此步骤之前的名称)。

>gene_X
ACTGAGGCCAATGAA...
>gene_X
CCCTGAGTAGAT...

这会有问题,所以我希望使用文件名重写 header,所以它最终是:

>Homo_sapien_XYZ_20102
ACTGAGGCCAATGAA...
>Homo_sapein_ABC_20102
CCCTGAGTAGAT...

有人知道怎么做吗?我用来创建一个序列文件的代码行很简单:

#!/bin/bash

for files in *_20102.fa
do
    cat ${files} >> geneA_consensus.fa
done

awk 救援!

$ awk 'FNR==1{print FILENAME; next}1' *_20102.fa > geneA_consensus.fa

不需要循环。

这适用于我的测试集。

for file in *.fasta
do
   echo ">$file" >> out.fasta
   tail -n +2 $file >> out.fasta
   echo >> out.fasta
done

这个简单版本包括文件扩展名。

最后一个回显确保下一个 header 出现在它自己的行中,即使之前的 FASTA 文件没有以换行符结尾。