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

时间:2018-12-26 19:46:15

标签: bash fasta consensus

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

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

Homo_sapien_XYZ_20102.fa

在此文件中的顺序为:

>gene_X
ACTGAGGCCAATGAA...

然后创建另一个文件:

Homo_sapein_ABC_20102.fa

>gene_X
CCCTGAGTAGAT...

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

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

这将是有问题的,所以我希望使用文件名重写该标头,以便最终成为:

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

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

#!/bin/bash

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

3 个答案:

答案 0 :(得分:1)

这适用于我的测试仪。

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

此简单版本包含文件扩展名。

即使上一个FASTA文件没有以换行结尾,最后一个回声也可以确保下一个标头出现在自己的行上。

答案 1 :(得分:0)

靠近代码,我将标题作为新标题回显,并在转储文件时省略标题:

#!/bin/bash

for file in *_20102.fa
do
    echo ${file%%.*} >> geneA_consensus.fa
    tail +2 $file >> geneA_consensus.fa
done

还请注意,我稍微更改了循环变量名称。

答案 2 :(得分:0)

awk来营救!

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

不需要循环。

相关问题