LoginSignup
1
1

More than 5 years have passed since last update.

SINGLE FASTA

Last updated at Posted at 2015-01-10

perl のワンライナーに関しての、適当な解説 #1/#2/#3/#4

Genbank format から sequence を取り出す

Genbank format ってなんぞ?って人は、こちら

普通に FASTA 選択しなおしてダウンロードすれば済むが、他人様がお持ちの場合は、バージョン違いとか、余計な地雷を踏む事にもなりかねないので、

$ perl -lne 'next if !( /ORIGIN/ .. m{//} ); next if !/\d/ ; s/[\d\s]//g ; printf qq{>%s\n%s\n}, $ARGV, $_ ' GENBANK.txt
  • unless は地雷
  • $ARGV が気に入らないなら ACCESSION から文字列取ってくるとか、お好きに

アレな作業をしなきゃならん時には、

$ bl2seq -i <( 上のコード ) -j SOMETHING.fa -p blastn

consensus の N の位置と長さを知る

ゲノムプロジェクト毎に公表はしているものですが、、、

$ perl -Mvars='$s' -lne 'next if />/; $s .= $_ }{ $, = "\t";  print $-[0] + 1, length $1 while $s =~ /(?<!N)(N{1,})(?!N)/ig' consensus.fa

大きな N の連続だけを知りたい場合 (N{1,})(N{1000,}) などと変更する。

本当に正しく算出出来てるのかどうか不安になったなら、

$ perl -Mvars='$s' -lne ' next if />/ ; $s .= $_ }{ print substr $s, INDEX, LENGTH' consensus.fa
# INDEX は、posision - 1 
# LENGTH は、長さ

などとして、確認すれば良い。

コードゴルフ的には、 $, = "\t" だが、 print join "\t" の方が普通かな、、、

異物混入

もちろん、これは承知の上で。

while $s =~ /(?<!N)(N{1,})(?!N)/ig を while $s =~ /(?<![^ACGTN])([^ACGTN]{1,})(?![^ACGTN])/ig
とすれば、異物が入ってた場合の、場所と長さを見る事も出来る。

制限酵素断片

例えば、HindIII ( 'A/AGCTT' で切れる。)での断片がどの様に表われるか知りたい場合。

配列そのまま
$ perl -Mvars='$s' -lne 'next if />/; $s .= $_ }{ my @d = split /(?<=A)(?=AGCTT)/, $s ; print for @d' consensus.fa
長さ
$ perl -Mvars='$s' -lne 'next if />/; $s .= $_ }{ my @d = split /(?<=A)(?=AGCTT)/, $s ; print length for @d' consensus.fa

うん? BssHII( 'G/CGCGC' で切れる。) とかって dry では、正確にはどう切れるんだっけか?

GC の長い繰替えし配列なんて結構あると思うが、、、まあ、 wet だと誤差範囲の一言で済む話だけど。

次回へ。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1