パールを使ってテキストを少しいじってから解析しているのだが、ちょっと理由が分らず困っていた事があった。
プログラミングは慣れていないので本当に頭がいたい。
しかし、ちょっと調べてみたい。と言う時にバイオインフォマジシャンに頼むわけにもいかない部分も多い。
個々の問題は誰かに聞いて解決すると言うものでもないときもある。
たぶんプログラミングが本職の人だったらわけもなくやってしまうのだろうけど、
フォーマットが違うデーターベースを扱う時に時々つまづいてしまう。
今回、JGIのデーターを使って解析しようとしたら、フォーマットが異なっていた。
データーがタブではなく|で区切られていたのだ。
これのせいでうまく自分の調べたい名前が拾えない。
なんでだろ。
タブだとsplitとう命令で分割できるのに、|は分割できない。
しかし、UNIXのコマンドを使ってうまく処理できた。
と言うか無理やり処理した。
CUTと言うコマンド。
CUT -C 9- ファイル名 > アウトプット名
とやると各行の9文字目以降から書き出してくれる。
つまり、9文字より前をCUTしてくれる。
まあいまだに|のsplitの仕方は分らないのだが、CUTでいらないところを削って無理やり使いました。
プログラミングは慣れていないので本当に頭がいたい。
しかし、ちょっと調べてみたい。と言う時にバイオインフォマジシャンに頼むわけにもいかない部分も多い。
個々の問題は誰かに聞いて解決すると言うものでもないときもある。
たぶんプログラミングが本職の人だったらわけもなくやってしまうのだろうけど、
フォーマットが違うデーターベースを扱う時に時々つまづいてしまう。
今回、JGIのデーターを使って解析しようとしたら、フォーマットが異なっていた。
データーがタブではなく|で区切られていたのだ。
これのせいでうまく自分の調べたい名前が拾えない。
なんでだろ。
タブだとsplitとう命令で分割できるのに、|は分割できない。
しかし、UNIXのコマンドを使ってうまく処理できた。
と言うか無理やり処理した。
CUTと言うコマンド。
CUT -C 9- ファイル名 > アウトプット名
とやると各行の9文字目以降から書き出してくれる。
つまり、9文字より前をCUTしてくれる。
まあいまだに|のsplitの仕方は分らないのだが、CUTでいらないところを削って無理やり使いました。
PR
最もクラスター数の多い順にCLUTER_IDナンバーをつけて吐き出します。
#!/usr/bin/perl -w
use strict;
use warnings;
use POSIX;
#################################################
my ($fastafile) = @ARGV;
open FASTA, "<$fastafile";
my %hash=(); # initializes a hash
while (<FASTA>)
{
if ($_ =~ /^>/)
{
my $header = $_;
$header =~ s/\s//g;
my $read_id = $_;
$hash{$header}{name}=$read_id;
my $line = <FASTA>;
$hash{$header}{sequence}= $line;
}
}
close FASTA;
#################################################
my $counter = 0;
my $name = <STDIN>;
open (FASTANAME, $name);
while (my $name_cluster = <FASTANAME>)
{
$counter = $counter + 1;
if ($counter < 10)
{print "\nCLUSTER_ID_0000$counter\n"
}elsif ($counter < 100)
{print "\nCLUSTER_ID_000$counter\n"
}elsif ($counter < 1000)
{print "\nCLUSTER_ID_00$counter\n"
}elsif ($counter < 10000)
{print "\nCLUSTER_ID_0$counter\n"
}
my @filename = split (" ", $name_cluster);
my @count = @filename;
if (@count <= 1)
{
exit;
}
my $header1 = ">$filename[0]";
$header1 =~ s/\s//g;
if (exists $hash{"$header1"})
{
print "$hash{$header1}{name}";
print "$hash{$header1}{sequence}";
}
}
close (FASTANAME);
#!/usr/bin/perl -w
use strict;
use warnings;
use POSIX;
#################################################
my ($fastafile) = @ARGV;
open FASTA, "<$fastafile";
my %hash=(); # initializes a hash
while (<FASTA>)
{
if ($_ =~ /^>/)
{
my $header = $_;
$header =~ s/\s//g;
my $read_id = $_;
$hash{$header}{name}=$read_id;
my $line = <FASTA>;
$hash{$header}{sequence}= $line;
}
}
close FASTA;
#################################################
my $counter = 0;
my $name = <STDIN>;
open (FASTANAME, $name);
while (my $name_cluster = <FASTANAME>)
{
$counter = $counter + 1;
if ($counter < 10)
{print "\nCLUSTER_ID_0000$counter\n"
}elsif ($counter < 100)
{print "\nCLUSTER_ID_000$counter\n"
}elsif ($counter < 1000)
{print "\nCLUSTER_ID_00$counter\n"
}elsif ($counter < 10000)
{print "\nCLUSTER_ID_0$counter\n"
}
my @filename = split (" ", $name_cluster);
my @count = @filename;
if (@count <= 1)
{
exit;
}
my $header1 = ">$filename[0]";
$header1 =~ s/\s//g;
if (exists $hash{"$header1"})
{
print "$hash{$header1}{name}";
print "$hash{$header1}{sequence}";
}
}
close (FASTANAME);
ブラストクラストを実行するとクラスタリングされた遺伝子の名前だけが吐き出される。
各行にはクラスタリングされた遺伝子の名前がリストアップされる。
これらのうち一番左側に書かれている遺伝子がクラスタリングされた最も長い配列。
クラスタリングされた遺伝子のうち最も長い遺伝子名のみを抽出するプログラムを書いてみた。
以下プログラム
#!/usr/bin/perl -w
use strict;
use warnings;
use POSIX;
my $counter = 0;
my $name = <STDIN>;
open (FASTANAME, $name);
while (<FASTANAME>)
{
my @filename = split( " ", $_);
my @count = @filename;
if (@count <= 1)
{
exit;
}
print ">$filename[0]\n";
}
close (FASTANAME);
各行にはクラスタリングされた遺伝子の名前がリストアップされる。
これらのうち一番左側に書かれている遺伝子がクラスタリングされた最も長い配列。
クラスタリングされた遺伝子のうち最も長い遺伝子名のみを抽出するプログラムを書いてみた。
以下プログラム
#!/usr/bin/perl -w
use strict;
use warnings;
use POSIX;
my $counter = 0;
my $name = <STDIN>;
open (FASTANAME, $name);
while (<FASTANAME>)
{
my @filename = split( " ", $_);
my @count = @filename;
if (@count <= 1)
{
exit;
}
print ">$filename[0]\n";
}
close (FASTANAME);