2016-04-21 28 views
1

有一个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 

,基因名称是第一和第二结肠之间:

g027092 
g000011 
g000012 

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

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

$cat g027092.txt 
ATGAGCCTGATTATTGATGTTATTTCGCGT 
AAAACATCCGTCAAACAAACGCTGATTAAT 

如何制作的?

回答

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";如果当前记录是在查找表中, 使用所设定的文件名键和txt扩展名

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

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

+0

嗨@karakfa,你能解释一下吗? –

+0

完成。 awk是如此强大以及正则表达式。 – Ming

+0

干杯@karafka !!! –

相关问题