我有很多.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
答案 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是每个文件的记录数,对于新文件重置为零。