2016-04-21 59 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 !!! –

相關問題