将每个测序数据提取为单个文件

时间:2016-04-21 19:27:29

标签: python linux bash awk sed

有一个ecoli.ffn文件,其中的行指示了测序基因的名称:

$head ecoli.ffn
>ecoli16:g027092:GCF_000460315:gi|545267691|ref|NZ_KE701669.1|:551259-572036
ATGAGCCTGATTATTGATGTTATTTCGCGT
AAAACATCCGTCAAACAAACGCTGATTAAT
>ecoli16:g000011:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042
GTGTACGCTATGGCGGGTAATTTTGCCGAT
>ecoli16:g000012:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042
GTGTACGCTATGGCGGGTAATTTTGCCGAT
CTGACAGCTGTTCTTACACTGGATTCAACC
CTGACAGCTGTTCTTACACTGGATTCAACC

如上所示,基因名称位于第1和第2个结肠之间:

g027092
g000011
g000012

我想使用ecoli.ffn生成三个文件:g027092.txtg000011.txtg000012.txt,包含每个测序数据。

例如,g027092.txt将包含原始数据,但不包含标题

$cat g027092.txt
ATGAGCCTGATTATTGATGTTATTTCGCGT
AAAACATCCGTCAAACAAACGCTGATTAAT

如何制作?

1 个答案:

答案 0 :(得分:2)

awk救援!

$ awk -F: -v RS=">" 'NR==FNR{n=split($0,t,"\n");
                             for(i=1;i<n;i++) a[t[i]];
                             next}
                     $2 in a{file=$2".txt"; 
                             sub(/[^\n]+\n/,""); 
                             print > file}' index file


$ head g*.txt
==> g000011.txt <==
GTGTACGCTATGGCGGGTAATTTTGCCGAT


==> g000012.txt <==
GTGTACGCTATGGCGGGTAATTTTGCCGAT
CTGACAGCTGTTCTTACACTGGATTCAACC
CTGACAGCTGTTCTTACACTGGATTCAACC


==> g027092.txt <==
ATGAGCCTGATTATTGATGTTATTTCGCGT
AAAACATCCGTCAAACAAACGCTGATTAAT

<强>解释

  

NR==FNR{n=sp...块解析第一个文件并创建查找   表

     

$2 in a{file=$2".txt";如果当前记录在查找表中,   使用key和txt扩展名设置文件名

     

sub(/[^\n]+\n/,"")   删除标题行

     

print > file并打印到指定的   文件名。