将nexus转换为FASTA格式

时间:2014-12-29 01:59:31

标签: shell awk type-conversion fasta

我有很多.nexus个文件要转换为FASTA样式格式并合并为一个.fasta文件。这是一个示例代码:

for i in *.nexus;

do
 awk 'NR >5' /path/to/nexus_files/$i | tr -d "'" | tr " " "\n" | sed 's/locus/>locus/g' > /path/to/fasta/${i}.fasta
done

这适用于第一个nexus文件,但#NEXUS标题仍保留在后续转换中。

输入:

#NEXUS
begin data;
    dimensions ntax=1 nchar=300;
    format datatype=dna missing=? gap=-;
matrix
'locus1_individual-1' 
 ???????????????????????????????TAGATTTTTTAGTCCTTAC
;
end;

期望的输出:

>locus1_individual-1
???????????????????????????????TAGATTTTTTAGTCCTTAC

2 个答案:

答案 0 :(得分:1)

为了加快速度,你可以减少所需命令的数量:

for i in *.nexus;
do
 awk 'NR>5 {gsub(f,"");gsub(/ /,"\n");gsub(/uce/,">&");print}' f="'" /path/to/nexus_files/$i > /path/to/fasta/${i}.fasta
done

来自anishsane的想法。 (全部在一个awk

awk 'FNR>5 {sub(/\.nexus$/,"",FILENAME);sub(/.*\//,"/path/to/fasta/",FILENAME);gsub(f,"");gsub(/ /,"\n");gsub(/uce/,">&");print >FILENAME".fasta"}' f="'" /path/to/nexus_files/*

First sub从文件名中删除nexus扩展名 第二个改变/path/to/fasta/的路径 现在使用FNR非常重要,因为您在一个awk

中读取了多个文件

答案 1 :(得分:0)

尝试:

for i in *.nexus;
do
 awk 'FNR >5' /path/to/nexus_files/$i | tr -d "'" | tr " " "\n" | sed 's/uce/>uce/g' > /path/to/fasta/${i}.fasta
done

NR是文件间的记录总数,FNR是每个文件的记录数,对于新文件重置为零。