2016-04-21 10 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 

は、遺伝子名は、第1及び第2のコロンの間である。

g027092 
g000011 
g000012 

私は、g027092.txt,g000011.txtg000012.txtの3つのファイルを生成するために、それぞれのシーケンシングデータを含むようにecoli.ffnを使用します。例えば

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 !!! –

関連する問題