有一个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.txt
,g000011.txt
,g000012.txt
,包含每个测序数据。
例如,g027092.txt
将包含原始数据,但不包含标题:
$cat g027092.txt
ATGAGCCTGATTATTGATGTTATTTCGCGT
AAAACATCCGTCAAACAAACGCTGATTAAT
如何制作?
答案 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
并打印到指定的 文件名。