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

有一个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.txtg000012.txt ,包含每个测序数据。

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

 $cat g027092.txt ATGAGCCTGATTATTGATGTTATTTCGCGT AAAACATCCGTCAAACAAACGCTGATTAAT 

如何做到这一点?

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... block解析第一个文件并创建一个查找表

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

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

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